我一直只使用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()
中放置了一个print语句,并且isArray()
正在执行并且大部分时间都返回false
,但确实返回{{ 1}}偶尔(对于我预期的情况)。但是,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
模板的情况之一。显然,它没有。
谁能告诉我我错过了什么?
答案 0 :(得分:0)
我想知道你是否应该这样做:
$if(x.array)$ $ArrayAdd(x, className)$ $endif$
具体来说,使用x.array
而不是x.isArray
,因为属性的名称是“array”,而“is”只是布尔属性访问器的Java Beans约定的前缀。