我只使用 StringTemplate 4 一个星期,所以这可能是我正在做的事情,但我似乎无法完成这项<if>
工作。
我正在使用 4.02(因为这是 Maven 存储库中的最新版本)。我有一堂课叫Variable
. 这是一个片段:
class Variable
{
...
public boolean isArray()
{
return _bIsArray;
}
}
我有一个包含一行的模板(分隔符是$
, $
):
$if(x.isArray)$ $ArrayAdd(x, className)$ $endif$
如果我删除if
并简单地让它执行$ArrayAdd(...)$
所有内容,ArrayAdd
则显然会执行。然后我把它放$if$
回去。我还放了一个打印语句,isArray()
并且大部分时间isArray()
都在执行并返回,但偶尔会返回一次(对于我预期的情况)。但是,永远不会从.false
true
$ArrayAdd
$if$
我查看了痕迹(我不擅长阅读)并得到:
declareSetGet:0227: load_local 0 stack=[ ], calls=ObjectClass _sub1
declareSetGet, sp=-1, nw=0
declareSetGet:0230: load_prop #25:"isArray" stack=[
altLocation<CUSTOM>::Array<1>::Custom<altLocationObj> ], calls=ObjectClass _sub1
declareSetGet, sp=0, nw=0
declareSetGet:0233: brf 254 stack=[ null ], calls=ObjectClass _sub1
declareSetGet, sp=0, nw=0
ObjectClass:0121: newline stack=[ ], calls=ObjectClass, sp=-1, nw=959
ObjectClass:0122: write_str #15:"}" stack=[ ], calls=ObjectClass, sp=-1, nw=0
这是我希望ArrayAdd
执行模板的情况之一。显然,事实并非如此。
谁能告诉我我错过了什么?