朱莉娅:从字符串获取DataType

时间:2019-03-07 09:57:24

标签: types julia

我想从字符串(从文本参数文件)获得类型。我尝试过类似的事情:

parse(DataType, "UInt16")

DataType("UInt16")

没有成功。我必须实现自己的解析器还是Julia中已经有一个解析器?

2 个答案:

答案 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