2014-01-21 66 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