Function eval无法访问函数范围中的变量
在下面的MnWE(最小不工作示例)中,当我调用test(2)时,我得到了错误: 错误:UndefVarError:var2未在测试中定义。/none:6 如何在不使用全局变量var1和var2的情况下解决此问题。在我的实际情况中,var1和var2是两个很长的矩阵,只需要一次就可以确定变量s1。将它们用作全局变量似乎很难看(而且没有效果),不是吗 提前感谢您的帮助Function eval无法访问函数范围中的变量,function,julia,eval,Function,Julia,Eval,在下面的MnWE(最小不工作示例)中,当我调用test(2)时,我得到了错误: 错误:UndefVarError:var2未在测试中定义。/none:6 如何在不使用全局变量var1和var2的情况下解决此问题。在我的实际情况中,var1和var2是两个很长的矩阵,只需要一次就可以确定变量s1。将它们用作全局变量似乎很难看(而且没有效果),不是吗 提前感谢您的帮助 function test(arg) var1=10 var2=100 s="var$arg" s=symbol(s) @eval(
function test(arg)
var1=10
var2=100
s="var$arg"
s=symbol(s)
@eval($s)
end
eval
始终在当前模块的全局范围内计算表达式,因此函数中定义的变量不在此范围内
就我个人而言,我会使用元组,向量或字典在这种情况下,你现在。例如,下面是使用Dict的代码:
function test(arg)
var1=10
var2=100
d = Dict(1=>var1, 2=>var2)
d[arg]
end
这里有一个元组(更简洁一点):
如果var1
或var2
的创建成本很高,则可以使用以下模式:
function test(arg)
arg == 1 && return rand(10^7)
arg == 2 && return rand(10^6)
throw(ArgumentError("wrong value of arg ($arg)"))
end
在这种情况下,只执行相关的代码。如果在函数中包装var1
和var2
的生成,则可以使用上述两种方法实现相同的效果,例如
var1() = rand(10^7)
var2() = rand(10^6)
test(arg) = (var1, var2)[arg]()
eval
始终在当前模块的全局范围内计算表达式,因此函数中定义的变量不在此范围内
就我个人而言,我会使用元组,向量或字典在这种情况下,你现在。例如,下面是使用Dict的代码:
function test(arg)
var1=10
var2=100
d = Dict(1=>var1, 2=>var2)
d[arg]
end
这里有一个元组(更简洁一点):
如果var1
或var2
的创建成本很高,则可以使用以下模式:
function test(arg)
arg == 1 && return rand(10^7)
arg == 2 && return rand(10^6)
throw(ArgumentError("wrong value of arg ($arg)"))
end
在这种情况下,只执行相关的代码。如果在函数中包装var1
和var2
的生成,则可以使用上述两种方法实现相同的效果,例如
var1() = rand(10^7)
var2() = rand(10^6)
test(arg) = (var1, var2)[arg]()
伟大的谢谢你的解决方案,太好了。谢谢你的解决方案。