Julia 将字典的键和值导出为变量名和值
如何从字典的键和值创建变量?以下摘录(如PHP)是否可行Julia 将字典的键和值导出为变量名和值,julia,Julia,如何从字典的键和值创建变量?以下摘录(如PHP)是否可行 julia> d = Dict( "key1" =>111, "key2" =>222, "key3" =>333 ); julia> extract(d) julia> key1, key2, key3 (111,222,333) 键和值都返回迭代器。 collect然后生成一个数组 但是请注意,您通常不需要这样做,只需使用 for (k, v) in d
julia> d = Dict(
"key1" =>111,
"key2" =>222,
"key3" =>333
);
julia> extract(d)
julia> key1, key2, key3
(111,222,333)
键和值都返回迭代器。
collect然后生成一个数组
但是请注意,您通常不需要这样做,只需使用
for (k, v) in d
可以使用
eval
将新变量引入全局范围:
julia> x = 1
1
julia> function testeval()
eval(:(x = 5))
return x
end
testeval (generic function with 1 method)
julia> testeval()
5
julia> x # the global x has changed!
5
extract
函数可能如下所示:
julia> function extract(d)
expr = quote end
for (k, v) in d
push!(expr.args, :($(Symbol(k)) = $v))
end
eval(expr)
return
end
julia> extract(d)
julia> key1, key2, key3
(111,222,333)
请注意,每个模块都有自己的全局范围。因此,这将把变量引入定义了extract
函数的模块范围,也就是说,如果在REPL中定义了Main
模块,如示例所示
当使用<代码> EVA/COD>时,你应该非常小心,并且首先考虑其他方法,例如David P. Sanders和Dan Getz提到的方法。< /P>查看Maur3的包Parameters.jl()。具体地说,解包Dict就是描述这个操作的方式。太棒了!谢谢你的警告!我目前只在程序开始时使用它从json文件创建全局常量,您的函数很适合这个目的。我把你的修改成了推!(expr.args,:(const$(Symbol(k))=$v))。然后,如果修改常量key1的值,我将得到
警告:重新定义常量key1
。
julia> function extract(d)
expr = quote end
for (k, v) in d
push!(expr.args, :($(Symbol(k)) = $v))
end
eval(expr)
return
end
julia> extract(d)
julia> key1, key2, key3
(111,222,333)