gpt4 book ai didi

eval - 在 Julia 中使用 eval 处理可变参数

转载 作者:行者123 更新时间:2023-12-01 11:23:55 30 4
gpt4 key购买 nike

我刚刚开始使用 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 调用,那么它就可以工作。

能否请您解释一下为什么它不起作用以及如何解决它?

最佳答案

evaltoplevel scope 中运行, 不在函数范围内。无法动态更新函数范围内的绑定(bind)。在不知道您的确切用例的情况下,我怀疑有一种方法可以在不进行动态重新绑定(bind)的情况下做事。特别是,v1v2 等可能最好做成一个数组,V

不过,如果您确实必须这样做,您始终可以将v1 定义为子模块中的全局变量:

module FunTest
v1 = 0
function fun_test(varargs...)

if length(varargs) > 0
j = collect(linspace(1,length(varargs)-1,length(varargs)/2));

for i in j
@eval $(varargs[i]) = $(varargs[i+1])
end
end

println(v1)

end
export fun_test
end
using .FunTest
fun_test(:v1, 2) # result: 2

(我还修改了您的代码以避免解析字符串,最好通过 expression interpolation 完成。)

关于eval - 在 Julia 中使用 eval 处理可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39307216/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com