1

My code looks like this:

#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 -- is a list of string subList -- is a list of String

${listOfValues.size() is always zero, during the recursive call (call from B), though the list has more than one value. However when the macro is called from A the size is correct. Can you please point out if there is something missing...

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

这是它被弃用的原因之一。您无法访问父级#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 回答