0

私は 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 つです。明らかに、そうではありません。

何が欠けているのか誰か教えてもらえますか?

4

1 に答える 1

0

これを行うべきかどうか疑問に思っています:

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

具体的には、プロパティの名前が「array」であり、「is」はブール型プロパティ アクセサーの Java Beans 規則による単なるプレフィックスであるため、x.array代わりに使用します。x.isArray

于 2013-07-24T20:52:46.250 に答える