【发布时间】:2016-09-03 13:02:26
【问题描述】:
我刚刚开始使用 Julia。我正在尝试使用 eval (在 Julia 中)在函数中定义一组变量。假设我想将 v1 设置为 2:
function fun_test(varargs...)
v1 = 0;
if length(varargs) > 0
j = collect(linspace(1,length(varargs)-1,length(varargs)/2));
for i in j
expr_vargs = parse("$(varargs[i]) = $(varargs[i+1]);");
eval(expr_vargs);
end
end
println(v1)
end
调用函数为:
fun_test("v1", "2");
它不起作用,因为 println 返回 0(v1 的初始值)。但是,如果我在 Julia 的终端中运行类似的 eval 调用,那么它可以工作。
能否请您解释一下为什么它不起作用以及如何解决它?
【问题讨论】:
-
您的
expr_vargs很好。这是eval... -
嗨@Memming。你能澄清一下你的意思吗?
-
eval在全局范围内工作,但v1是本地的,因为v1=0行。 -
谢谢,在 Julia 中是否有任何替代方法可以在本地范围内将字符串作为表达式运行?我刚刚看到你可能会评估整个函数来做我想做的事,但我宁愿避免它。
-
正如@ChrisRackauckas 所说,
eval在全球范围内工作。其他相关 StackOverflow 问题(使用 google):stackoverflow.com/questions/21267962/…stackoverflow.com/questions/28882241/…stackoverflow.com/questions/20174352/julia-speeding-up-eval