请解释以下示例。
julia> string_foo = "foo"
"foo"
julia> eval(string_foo)
"foo"
julia> eval(:string_foo)
"foo"
julia> a_dict = Dict(:string_foo => 1, "string_foo" => 2,string_foo => 3)
Dict{Any,Int64} with 3 entries:
"string_foo" => 2
:string_foo => 1
"foo" => 3
不太令人惊讶的结果:
julia> a[string_foo]
3
julia> a["string_foo"]
2
julia> a[:string_foo]
1
更多令人惊讶的结果:
julia> a[eval(string_foo)]
3
julia> a[eval("string_foo")]
2
现在请解释一下!
julia> a[eval(:string_foo)]
3
我犹豫的结论是,当定义与符号(foo
)相同的变量(:foo
)时,可以将其用作键(:foo
)或值(eval(:foo)
)
这意味着我可以在完全定义任何变量之前执行以下操作:
julia> list_template = [:el1, :el2, :el3]
3-element Array{Symbol,1}:
:el1
:el2
:el3
julia> el1 = 1; el2 = 2; el3 = 3;
julia> eval(list_template)
3-element Array{Symbol,1}:
:el1
:el2
:el3
julia> eval.(list_template)
3-element Array{Int64,1}:
1
2
3
julia> el1 = "one"; el2 = "two"; el3 = "three";
julia> eval(list_template)
3-element Array{Symbol,1}:
:el1
:el2
:el3
julia> eval.(list_template)
3-element Array{String,1}:
"one"
"two"
"three"
在某些情况下,这似乎很有用。朱莉娅符号还有什么其他用途?