i = 50
function test()
i = 10
eval(:i)
end
test() # => 50
为什么这会评估为全球i
而不是本地?有没有办法让它评价到当地?我如何评估茱莉亚的局部变量
i = 50
function test()
i = 10
eval(:i)
end
test() # => 50
为什么这会评估为全球i
而不是本地?有没有办法让它评价到当地?我如何评估茱莉亚的局部变量
你不能。 Julia的eval
总是评估当前模块的范围,而不是你本地的范围。在运行时调用eval
是一种反模式和性能杀手。
根据不同的应用,你可以得到eval
的整个函数i
的本地值,如@simonster在this answer中描述。
由于@StefanKarpinski提到eval
的结果总是在全球范围内,但如果真的想在本地评价的东西,有各种方式来做到这一点:
import Base.Cartesian.lreplace
i = 50
function test1(expr)
i=10
eval(lreplace(expr,:i,i))
end
i = 50
function test2()
i = 10
@eval $i
end
test1(:(i)) # => 10
test2() # => 10
但我的首选方法,以评估在运行的表达式 - 时间是创建一个功能,我认为这是最高效的:
exprtoeval=:(x*x)
@eval f(x)=$exprtoeval
f(4) # => 16
试试'local i = 10' –