我想从字符串(从文本参数文件)获得类型。我尝试过类似的事情:
parse(DataType, "UInt16")
或
DataType("UInt16")
没有成功。我必须实现自己的解析器还是Julia中已经有一个解析器?
答案 0 :(得分:3)
getfield(Base, Symbol("UInt16")) # -> UInt16
怎么样?
您需要确保在相应模块中定义了UInt16
类型。
答案 1 :(得分:1)
您可以使用:
julia> eval(Symbol("UInt64"))
UInt64
但是,请注意,通常,在生产代码中使用eval
并不是最好的主意(特别是如果字符串是动态生成的)。当然-考虑到您的问题-这是您必须要做的,但是如果您想更安全,例如使用Dict
提供您仅需要的映射,例如:
julia> s = string.(subtypes(Signed))
6-element Array{String,1}:
"BigInt"
"Int128"
"Int16"
"Int32"
"Int64"
"Int8"
julia> t = subtypes(Signed)
6-element Array{Any,1}:
BigInt
Int128
Int16
Int32
Int64
Int8
julia> s = string.(t)
6-element Array{String,1}:
"BigInt"
"Int128"
"Int16"
"Int32"
"Int64"
"Int8"
julia> m = Dict(Pair(x...) for x in zip(s, t))
Dict{String,DataType} with 6 entries:
"Int16" => Int16
"Int64" => Int64
"BigInt" => BigInt
"Int8" => Int8
"Int128" => Int128
"Int32" => Int32
julia> m["Int32"]
Int32