2015-04-16 10 views
9

Sto cercando di sapere quali sono i moduli in Elixir. Perché in Erlang sono solo atomi, ma in elisir gli atomi iniziano con il carattere :. Quindi Ho controllato queste espressioni in iex:Il modulo di Elixir è un atomo?

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 

Quindi è abbastanza chiaro che sia List e :List sono atomi. Tuttavia, come funziona sul livello di interoperabilità di Erlang? Perché Erlang's ok equivale a Elixir's :ok.
Quindi quale di questi due (e :List) è uguale a 'List' in Erlang?

risposta

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 

Tutti atomi maiuscole in elisir ricevono automaticamente il prefisso Elixir..

+8

Ottima risposta! Per essere precisi al 100% nella denominazione, 'List',' String' in Elixir sono chiamati alias e si espandono in atomi. Quindi 'List' si espande a:" Elixir.List ". Tuttavia, puoi fare un alias puntare a quello che vuoi usando il form speciale alias, ad esempio: 'alias: foo, come: Lista'. –

+0

@ JoséValim Come posso ottenere questo alias dalla stringa di? 'String.to_atom (" List ")' fornisce ': List'. Io uso '{atom, _} = Code.eval_string (" Elenco ")' Ma immagino che non sia il modo più sicuro per farlo –

+3

Controlla 'Module.concat/2' e' Module.split/1'. –