2014-01-21 35 views

回答

6

你不能。 Julia的eval总是评估当前模块的范围,而不是你本地的范围。在运行时调用eval是一种反模式和性能杀手。

1

根据不同的应用,你可以得到eval的整个函数i的本地值,如@simonster在this answer中描述。

2

由于@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