2015-04-16 3 views
9

Я пытаюсь узнать, какие модули находятся в Эликсире. Потому что в Эрланге они всего лишь атомы, но в атомах Эликсира начинается с символа :. Так я проверил эти выражения в IEX:Является ли модуль Эликсира атомом?

iex(16)> is_atom(List) 
true 
iex(17)> is_atom(:List) 
true 
iex(18)> List == :List 
false 
iex(19)> a = List 
List 
iex(20)> b = :List 
:List 

Так что это довольно ясно, что оба List и :List являются атомы. Однако как это работает на уровне взаимодействия Erlang? Потому что Erlang's ok равен Elixir's :ok.
Итак, какой из этих двух (List и :List) равен 'List' в Erlang?

ответ

15
Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help) 
iex(1)> List == :List 
false 
iex(2)> List == :'Elixir.List' 
true 

Все прописные атомы эликсира автоматически получают префикс Elixir..

+8

Отличный ответ! Чтобы быть на 100% точным в названии, 'List',' String' в Elixir называются псевдонимами, и они расширяются до атомов. Поэтому 'List' расширяется до:" Elixir.List ". Однако вы можете сделать псевдоним для того, что хотите, используя специальную форму 'alias', например:' alias: foo, as: List'. –

+0

@ JoséValim Как я могу получить такой псевдоним из строки, чем? 'String.to_atom (« Список »)' дает ': List'. Я использую '{atom, _} = Code.eval_string (« Список »)' Но я думаю, что это не самый безопасный способ сделать это. –

+3

Проверьте 'Module.concat/2' и' Module.split/1'. –

Смежные вопросы