If statement StringTemplate 4<;如果>;不';好像不行
我只使用了StringTemplate4一周,所以这可能是我正在做的事情,但我似乎无法使If statement StringTemplate 4<;如果>;不';好像不行,if-statement,stringtemplate,If Statement,Stringtemplate,我只使用了StringTemplate4一周,所以这可能是我正在做的事情,但我似乎无法使正常工作 我使用的是4.02(因为这是Maven存储库中的最新版本)。我有一个名为Variable的类。这是一个片段: class Variable { ... public boolean isArray() { return _bIsArray; } } 我有一个有一行的模板(分隔符是$,$): 如果我删除If并简单地让它对所有内容执行$ArrayAdd(…)$,那么ArrayA
正常工作
我使用的是4.02(因为这是Maven存储库中的最新版本)。我有一个名为Variable
的类。这是一个片段:
class Variable
{
...
public boolean isArray()
{
return _bIsArray;
}
}
我有一个有一行的模板(分隔符是$
,$
):
如果我删除If
并简单地让它对所有内容执行$ArrayAdd(…)$
,那么ArrayAdd
将被清楚地执行。然后我将$if$
放回。我还在isArray()
中放置了一个print语句,isArray()
正在执行,并且大部分时间返回false
,但偶尔会返回true
(这正是我所期望的情况)。但是,$ArrayAdd
永远不会从$if$
中执行
我看了一下痕迹(我不擅长阅读),得到了:
declareSetGet:0227:load_local 0 stack=[],calls=ObjectClass\u sub1
声明集,sp=-1,nw=0
declareSetGet:0230:load#u prop#25:“isArray”堆栈=[
altLocation::Array::Custom],calls=ObjectClass\u sub1
申报者,sp=0,nw=0
declareSetGet:0233:brf 254 stack=[null],calls=ObjectClass\u sub1
申报者,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
模板的情况之一。显然,它不是
有人能告诉我我遗漏了什么吗?我想知道你是否应该这样做:
$if(x.array)$ $ArrayAdd(x, className)$ $endif$
具体来说,使用
x.array
而不是x.isArray
,因为属性的名称是“array”,而“is”只是根据Java Beans的布尔属性访问器约定的前缀。StringTemplate 4.0.7在Maven Central中:我敢打赌这不会有什么区别。我会失去:)它现在可以正常工作了!我仍然不明白为什么它调用了例程,但显然没有使用结果(在您的版本中)。但是,我会继续。谢谢你的帮助。
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
$if(x.array)$ $ArrayAdd(x, className)$ $endif$