我的代码如下所示:
#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调用宏时,大小是正确的。如果有遗漏的话,你能指出一下......答案 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不是为递归使用而设计的。速度有其局限性。您可以通过设置自己的计数器轻松解决问题。