Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 如何在宏中将字符串转换为特定的枚举类型?_Julia_Metaprogramming - Fatal编程技术网

Julia 如何在宏中将字符串转换为特定的枚举类型?

Julia 如何在宏中将字符串转换为特定的枚举类型?,julia,metaprogramming,Julia,Metaprogramming,我有一个定义了枚举的模块 module myModule @enum type A B B C D end type1 = myModule.A 现在我想声明这个枚举类型的一个实例,但我只有一个字符串来指定它是哪种类型。我尝试了以下方法: str = "B" type2 = eval(:(myModule.Symbol($str))) julia> myModule.length([1, 2, 3]) 3 julia> @code_lowered myModule.l

我有一个定义了枚举的模块

module myModule
  @enum  type A B B C D

end

type1 = myModule.A
现在我想声明这个枚举类型的一个实例,但我只有一个字符串来指定它是哪种类型。我尝试了以下方法:

str = "B"
type2 = eval(:(myModule.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
)
但我收到了一条我不太明白的警告信息:

警告:更换模块myModule


type2
的类型也只是一个
符号

可能最简单的方法是使用
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)
。例如,请尝试以下操作:

str = "B"
type2 = eval(:(myModule.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?