递归函数更改调用函数的变量值

问题描述 投票:0回答:1

这是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>
freemarker
1个回答
0
投票

使用

<#local temp = ...>
代替
<#assign temp = ...>
,它将按预期工作。
#assign
设置在主模板的命名空间中(几乎是一个全局变量)。 (
#local
我相信是后来添加的,所以命名不太好。)

© www.soinside.com 2019 - 2024. All rights reserved.