StringTemplate 4 <if>似乎不起作用</if>

时间:2013-07-24 19:25:13

标签: if-statement stringtemplate

我一直只使用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 模板的情况之一。显然,它没有。

谁能告诉我我错过了什么?

1 个答案:

答案 0 :(得分:0)

我想知道你是否应该这样做:

$if(x.array)$ $ArrayAdd(x, className)$ $endif$

具体来说,使用x.array而不是x.isArray,因为属性的名称是“array”,而“is”只是布尔属性访问器的Java Beans约定的前缀。