在 Julia 中将枚举转换为符号

hil*_*lem 1 enums symbols julia

我对枚举的定义如下。我想将枚举的每个实例映射到相应的符号中。我可以通过手动构造一个数组symbols并为其建立索引来做到这一点。有没有一种方法可以在不手动指定符号数组的情况下完成此任务?

@enum MyEnum A=1 B=2 C=3

symbols = [:A, :B, :C]

function enumToSymbol(x::MyEnum) :: Symbol
    return symbols[Int(x)]
end

@assert enumToSymbol(A) == :A
Run Code Online (Sandbox Code Playgroud)

Bog*_*ski 5

只需使用Symbol

julia> @enum MyEnum A=1 B=2 C=3

julia> Symbol(A)
:A

julia> x = A
A::MyEnum = 1

julia> Symbol(x)
:A
Run Code Online (Sandbox Code Playgroud)

其定义如下:

Base.Symbol(x::Enum) = namemap(typeof(x))[Integer(x)]::Symbol
Run Code Online (Sandbox Code Playgroud)

特别是你有一个未导出的:

julia> Base.Enums.namemap(typeof(x))
Dict{Int32,Symbol} with 3 entries:
  2 => :B
  3 => :C
  1 => :A
Run Code Online (Sandbox Code Playgroud)