在 Julia 中将枚举转换为符号

Converting enums to symbols in 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

只需使用Symbol:

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

julia> Symbol(A)
:A

julia> x = A
A::MyEnum = 1

julia> Symbol(x)
:A

定义如下:

Base.Symbol(x::Enum) = namemap(typeof(x))[Integer(x)]::Symbol

特别是你有一个 un-exported:

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