0

我只使用 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()都在执行并返回,但偶尔会返回一次(对于我预期的情况)。但是,永远不会从.falsetrue$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执行模板的情况之一。显然,事实并非如此。

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

4

1 回答 1

0

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

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

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

于 2013-07-24T20:52:46.250 回答