我有一个模块,其中定义了一个枚举。
module myModule
@enum type A B B C D
end
type1 = myModule.A
现在我想声明此枚举类型的实例,但我只有一个字符串指定它的类型。我尝试了以下方法:
str = "B"
type2 = eval(:(myModule.Symbol($str)))
但是我收到一条我不太明白的警告消息:
WARNING: replacing module myModule.
并且 type2
的类型也只是一个 Symbol
。
最佳答案
可能最简单的方法是使用getproperty
:
julia> module myModule
@enum type A B C D
end
Main.myModule
julia> str = "B";
julia> getproperty(myModule, Symbol(str))
B::type = 1
或者,您可以将表达式创建为字符串,然后解析并计算它:
julia> eval(Meta.parse(string("myModule.", str)))
B::type = 1
或者,同样的事情,但使用字符串插值而不是使用 string
函数:
julia> eval(Meta.parse("myModule.$str"))
B::type = 1
请注意,语法 myModule.Symbol(str)
与 myModule.B
不同。看起来该语法实际上只是在全局范围内调用 Symbol(str)
。例如,尝试以下操作:
julia> myModule.length([1, 2, 3])
3
julia> @code_lowered myModule.length([1, 2, 3])
CodeInfo(
1 ─ %1 = (Base.arraylen)(a)
└── return %1
)
关于julia - 如何在宏中将字符串转换为特定的枚举类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808569/