Вероятно, самый простой способ - использовать 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
)