在 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
我有一个枚举的定义如下。我想将枚举的每个实例映射到相应的符号中。我可以通过手动构造一个数组 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