私は 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 つです。明らかに、そうではありません。
何が欠けているのか誰か教えてもらえますか?