1

私のコードは次のようになります。

#macro (myMac $listOfValues)
    #foreach ($val in ${listOfValues})
        #set ($subList = $val.child())
        #if (some condition)
            some output
            #if (${velocityCount} < ${listOfValues.size()})
               ,\n
            #end
        #else
            #myMac(${subList})  -- B
        #end
    #end
#end
#myMac (${listOfValues})  -- A

listOfValues -- 文字列のリストです subList -- 文字列のリストです

${listOfValues.size() は、再帰呼び出し (B からの呼び出し) 中は常にゼロですが、リストには複数の値があります。ただし、マクロが A から呼び出される場合、サイズは正しいです。至らぬところがありましたらご指摘いただけませんでしょうか...

4

3 に答える 3

2

同様の問題に遭遇しました。再帰マクロに役立つ投稿を見つけました。

基本的に、マクロパラメータを逆参照し、代わりにローカルコピーを使用することを提案しました。これで問題が解決すると思います...

だから試してみてください

#macro (myMac $listOfValues)
#set ($localValues = $listOfValues) ##dereference parameters
#foreach ($val in ${localValues})
    #set ($subList = $val.child())
    #if (some condition)
        some output
        #if (${velocityCount} < ${localValues.size()})
            ,\n
        #end
    #else
        #myMac(${subList})  -- B
    #end
#end
#end
#myMac (${listOfValues})  -- A
于 2013-09-20T03:10:40.337 に答える
1

#myMac へのすべての呼び出しには新しい #foreach が含まれ、すべての #foreach は独自の $velocityCount を設定します

これが廃止された理由の 1 つです。親 #foreach の $velocityCount にはアクセスできません。

v1.7 では、現在のループに $foreach.count、親に $foreach.parent.count、$foreach.parent.parent.count などを使用できます。

または、独自のカウンターを作成することもできます。

于 2012-10-18T16:42:03.717 に答える
0

おそらく、velocityCount は再帰的な使用のために設計されていません。速度には限界があります。独自のカウンターを設定することで、簡単に回避できます。

于 2012-10-18T09:37:28.220 に答える