这是freemarker递归函数调用的POC代码。实际代码有点复杂。
这里当我调用上面的模板时,函数会递归地调用自身。我用
temp
初始化 init
变量。递归函数调用自身并传递 temp
value 。现在,递归调用的 temp
应该位于该子例程调用的本地,但是它会影响调用者的 temp
变量的值。
这里的最终输出是 'temp'
而不是 'init'。
这是通常的行为吗? 我怎样才能避免调用者变量在递归调用期间不改变
${getTempVar('init')}
<#function getTempVar var >
<#assign temp = var>
<#if var == 'init' && getTempVar('temp') == 'temp'>
</#if>
<#return temp>
</#function>
使用
<#local temp = ...>
代替 <#assign temp = ...>
,它将按预期工作。 #assign
设置在主模板的命名空间中(几乎是一个全局变量)。 (#local
我相信是后来添加的,所以命名不太好。)