符号在Julia中有什么用(除了比使用字符串稍有效率外)?

时间:2019-03-08 08:26:17

标签: julia symbols

请解释以下示例。

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"

在某些情况下,这似乎很有用。朱莉娅符号还有什么其他用途?

0 个答案:

没有答案