递归调用中的速度计数不递增

时间:2012-10-17 16:39:47

标签: velocity

我的代码如下所示:

#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 - 是String

的列表 在递归调用(从B调用)期间,$ {listOfValues.size()始终为零,尽管列表具有多个值。但是当从A调用宏时,大小是正确的。如果有遗漏的话,你能指出一下......

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

对#myMac的每次调用都包含一个新的#foreach,每个#foreach设置自己的$ velocityCount

这是它被弃用的原因之一。您无法访问父级#foreach的$ velocityCount。

在v1.7中,您可以使用$ foreach.count作为当前循环,使用$ foreach.parent.count作为父级和$ foreach.parent.parent.count,依此类推。

或者你可以自己做一个计数器。

答案 2 :(得分:0)

也许velocityCount不是为递归使用而设计的。速度有其局限性。您可以通过设置自己的计数器轻松解决问题。