【问题标题】:StringTemplate 4 <if> doesn't seem to workStringTemplate 4 <if> 似乎不起作用
【发布时间】:2013-07-24 11:09:47
【问题描述】:

我只用了一周的 StringTemplate 4,所以这可能是我正在做的事情,但我似乎无法使 &lt;if&gt; 工作。

我使用的是 4.02(因为这是 Maven 存储库中的最新版本)。我有一门课叫Variable。这是一个sn-p:

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 模板的情况之一。显然不是。

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

【问题讨论】:

标签: if-statement stringtemplate


【解决方案1】:

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

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

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

【讨论】:

  • 我敢打赌这不会有什么不同。我会迷路的 :) 它现在可以正常工作了!我仍然不明白为什么它调用了例程但显然没有使用结果(你的版本在哪里)。但是,我会继续前进。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2017-05-15
  • 2017-10-13
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
相关资源
最近更新 更多