Юлия: получить DataType из строки - PullRequest
0 голосов
/ 07 марта 2019

Я хочу получить тип из строки (из файла текстовых параметров).Я пробовал что-то вроде:

parse(DataType, "UInt16")

или

DataType("UInt16")

без успеха.Должен ли я реализовать свой собственный анализатор или он уже есть в Юлии?

Ответы [ 2 ]

3 голосов
/ 07 марта 2019

как насчет getfield(Base, Symbol("UInt16")) # -> UInt16?

вам нужно убедиться, что в соответствующем модуле определен тип UInt16.

1 голос
/ 07 марта 2019

Вы можете использовать:

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
...