2015-04-16 15 views
9

Elixir'de hangi modüllerin bulunduğunu anlamaya çalışıyorum. Çünkü Erlang'da sadece atomlar, ama Elixir atomlarında : karakteriyle başlar. Yani IEX içinde bu ifadeleri kontrol ettim:Elixir'in modülü bir atom mu?

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 

yüzden List ve :List hem atomlar olduğu çok açık. Ancak, Erlang interop katmanında nasıl çalışır? Çünkü Erlang'ın ok Elixir'in :ok'a eşittir.
Bu iki (List ve :List) hangisi Erlang'da 'List''a eşittir? Iksir içinde

cevap

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 

tüm büyük atomlar otomatik Elixir. önek alır.

+8

Harika cevap! İsimlendirmede% 100 kesin olmak gerekirse, Elixir'de 'List'''' String' takma ad olarak adlandırılır ve atomlara genişler. Bu yüzden 'List '," Elixir.List "e genişler. Ancak, 'alias' özel formunu kullanarak istediğiniz bir takma ad oluşturabilirsiniz, örneğin: alias: foo, as: List'. –

+0

@ JoséValim Diziden böyle takma adları nasıl elde edebilirim? 'String.to_atom (" List ")' 'List' verir. Ben {atom, _} = Code.eval_string ("List") kullanıyorum 'Ama bunu yapmanın en güvenli yolu olmadığını hayal ediyorum –

+3

' Module.concat/2' ve 'Module.split/1' kontrol edin. –