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' –