我想使用元编程来回答这个问题,但for循环的作用域规则导致我的变量不能在最上层(REPL)范围内定义:
for x = [:A1, :A2]
@eval x = rand(2,2)
end
Run Code Online (Sandbox Code Playgroud)
我知道这可能是一个简单的方法,但我周五晚上的脑子想不到一个.你们其中一个元编程爱好者可以帮助我找到一个简洁的解决方案吗?(我意识到一个宏可能与转义一起工作,但我想要想更短的事情)
我刚开始使用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
Run Code Online (Sandbox Code Playgroud)
将该功能称为:
fun_test("v1", "2");
Run Code Online (Sandbox Code Playgroud)
它不起作用,因为println返回0(v1的初始值).但是,如果我在Julia的终端中运行类似的eval调用,那么它可以工作.
您能否澄清一下为什么它不起作用以及如何解决它?
考虑d朱莉娅的一本字典,其中包含数千个键.每个键都是一个符号,每个值都是一个数组.我可以访问与符号关联的值并将其:S1分配给变量k1via
k1 = d [:S1]
现在假设我想k2, k3, k4, ..., k10通过对特殊键重复相同的过程来定义新变量:S1 ... :S10(不是对于字典中的所有键).最有效的方法是什么?我的印象是这可以通过元编程来解决,但不确定.