私は StringTemplate 4 を 1 週間しか使用していないので、おそらく私が行っていることですが、うまく機能していないようです<if>
。
私は 4.02 を使用しています (Maven リポジトリの最新版であるため)。というクラスがありVariable
ます。これはスニペットです:
class Variable
{
...
public boolean isArray()
{
return _bIsArray;
}
}
行を持つテンプレートがあります(区切り文字は$
, $
):
$if(x.isArray)$ $ArrayAdd(x, className)$ $endif$
を削除してif
、単に$ArrayAdd(...)$
すべてに対して実行させると、ArrayAdd
明らかに実行されます。次に、$if$
元に戻します。また、printステートメントを入れて、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
これは、テンプレートが実行されることを期待するケースの 1 つです。明らかに、そうではありません。
何が欠けているのか誰か教えてもらえますか?