有人可以解决我遇到的这个宏错误吗,它只在版本 0.6 中开始发生:
mutable struct Foo
x::Int
end
macro test(myfoo)
quoteblock =
quote
myfoo.x += 1
end
return quoteblock
end
function func(myfoo)
@test myfoo
println(myfoo.x)
end
foo = Foo(3)
func(foo)
理论上这应该只是替换该行@test myfoo
在函数中func
with myfoo.x += 1
在编译时,这应该可以工作,但我收到错误:
UndefVarError: myfoo not defined
列出了相应的变更说明here https://github.com/JuliaLang/julia/blob/master/NEWS.md#breaking-changes-1:
当在定义该宏的模块中调用宏时,
宏中的全局变量现在可以在宏中正确解析
定义环境。这种变化造成的破坏通常表现为
作为 0.5 以下不会发生的未定义变量错误。修复此类
破损通常需要在
有问题的宏(#15850)。
所以答案就是逃避myfoo
:
macro test(myfoo)
quote
$(esc(myfoo)).x += 1
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)