【发布时间】:2021-03-18 18:24:23
【问题描述】:
如果在 main 中定义,我有一个宏。
macro check_set(d,v)
nm = string(v)
quote
global $v
if haskey($d,$nm)
$v = $d[$nm]
end
end
end
但是,当我将它放入模块(在模块内定义的宏)以在函数(也在模块内定义)中使用时,我会遇到范围问题。
export setVars
function setVars(val::Dict)
global max_iter
@check_set val max_iter
end
我主要调用setVars(config),其中config 是预期的字典。我明白了:
错误:UndefVarError:val 未定义
添加@macroexpand 我明白了:
begin
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:156 =#
global max_iter
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:157 =#
if Stuff.haskey(Stuff.val, "max_iter")
#= /home/dpazzula/Documents/Stuff/src/Stuff.jl:158 =#
Stuff.max_iter = Stuff.val["max_iter"]
end
end
所以 ERROR 是有道理的,当 val 被本地限定为函数时,它正在寻找 Stuff.val。
如何让它查找本地范围的val?
【问题讨论】:
标签: julia