我在将变量作为速度的映射添加到变量中时遇到问题,该变量已作为宏的属性传递。

考虑以下代码:

#macro ( test $attr )
    1 $attr.edd
    #set($attr.edd = "edd")
    2 $attr.edd

    #set($foo = {"bar" : "bar" })
    3 $foo.edd
    #set($foo.edd = "edd")
    4 $foo.edd
#end

#test({"bar" : "bar" })


我期望以下输出:

1 $attr.edd 2 edd 3 $foo.edd 4 edd


但是我得到:

1 $attr.edd 2 $attr.edd 3 $foo.edd 4 edd


谁能为我解决这个问题?

最佳答案

这是很粗略的,但是我猜属性是最终的(考虑到速度对待变量的方式,这似乎有些奇怪/危险),因此重新定义变量似乎可以解决问题:

#macro ( test $attr )
    #set($attr = $attr)

    1 $attr.edd
    #set($attr.edd = "edd")
    2 $attr.edd

    #set($foo = {"bar" : "bar" })
    3 $foo.edd
    #set($foo.edd = "edd")
    4 $foo.edd
#end

#test({"bar" : "bar" })


我希望其他人会有更好的解决方案...

08-26 08:04