2015-04-16 7 views
9

Ich versuche zu erfahren, welche Module in Elixir sind. Denn in Erlang sind sie nur Atome, aber in Elixir-Atomen beginnen mit : Zeichen. Also habe ich diese Ausdrücke in iex geprüft:Ist das Elixir-Modul ein Atom?

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 

es ist also ziemlich klar, dass beide List und :List sind Atome. Wie funktioniert es jedoch auf Erlang Interop-Layer? Denn Erlangs ok entspricht Elixirs :ok.
Also welche der beiden (List und :List) ist gleich 'List' in Erlang?

Antwort

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 

alle Großatome in den Elixir Elixir. prefix automatisch.

+8

Große Antwort! Um in der Benennung 100% genau zu sein, werden 'List',' String' in Elixir Aliase genannt und sie erweitern sich zu Atomen. Also 'List' expandiert zu:" Elixir.List ". Sie können jedoch mit dem speziellen Formular "Alias" einen Alias-Punkt auf das gewünschte Objekt setzen, zum Beispiel: 'alias: foo, as: List'. –

+0

@ JoséValim Wie kann ich einen solchen Alias ​​von String erreichen? 'String.to_atom (" Liste ")' gibt ': Liste'. Ich verwende '{atom, _} = Code.eval_string (" Liste ")' Aber ich stelle mir vor, es ist nicht der sicherste Weg, es zu tun –

+3

Überprüfen Sie 'Module.concat/2' und' Module.split/1'. –