相关疑难解决方法(0)

如何在Julia中评估局部变量

i = 50
function test()
  i = 10
  eval(:i)
end
test()  # => 50
Run Code Online (Sandbox Code Playgroud)

为什么这会评估全局i而不是本地?有没有办法让它评估到当地?

julia

10
推荐指数
2
解决办法
1582
查看次数

朱莉娅,加速了eval

Julia具有访问其自己的语法树的非常好的功能,这使得以编程方式生成新函数变得容易,但它比普通的Julia代码慢得多.

例如:

julia> timing = @time for i in [1:100] tan(pi/2*rand()); end
elapsed time: 1.513e-5 seconds (896 bytes allocated)

julia> timing = @time for i in [1:100] x = pi/2*rand(); eval(:(tan(x))); end
elapsed time: 0.0080231 seconds (23296 bytes allocated)

julia> timing = @time for i in [1:100]  eval(:(tan(pi/2*rand()))); end
elapsed time: 0.017245327 seconds (90496 bytes allocated)
Run Code Online (Sandbox Code Playgroud)

有没有办法给出eval与普通Julia代码相同的速度?

编辑:我能够使用该precompile功能略微加速eval ,但仍然不够:

julia> tmp3 = :(sin(x))
:(sin(x))

julia> timing = @time for i in [1:100000] x = pi/2*rand(); eval(tmp3); …
Run Code Online (Sandbox Code Playgroud)

julia

3
推荐指数
1
解决办法
1557
查看次数

标签 统计

julia ×2