2015-04-16 14 views
9

Tôi đang cố gắng tìm hiểu các mô-đun trong Elixir. Bởi vì trong Erlang chúng chỉ là nguyên tử, nhưng trong các nguyên tử Elixir bắt đầu với ký tự :. Vì vậy, tôi đã kiểm tra các biểu thức trong IEX:Mô-đun Elixir là một nguyên tử?

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 

Vì vậy, nó là khá rõ ràng rằng cả hai List:List là nguyên tử. Tuy nhiên, nó hoạt động như thế nào trên lớp Erlang interop? Bởi vì ok của Erlang bằng Elixir's :ok.
Vậy một trong hai (List:List) này bằng 'List' trong Erlang?

Trả lời

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ất cả các nguyên tử in hoa ở Elixir sẽ tự động nhận tiền tố Elixir..

+8

Câu trả lời hay! Để chính xác 100% trong việc đặt tên, 'List',' String' trong Elixir được gọi là bí danh và chúng mở rộng thành các nguyên tử. Vì vậy, 'List' mở rộng đến:" Elixir.List ". Tuy nhiên, bạn có thể tạo một điểm bí danh cho bất kỳ điều gì bạn muốn bằng cách sử dụng biểu mẫu đặc biệt 'alias', ví dụ:' alias: foo, as: List'. –

+0

@ JoséValim Làm thế nào tôi có thể đạt được bí danh như vậy từ chuỗi hơn? 'String.to_atom (" Danh sách ")' cho ': Danh sách'. Tôi sử dụng '{atom, _} = Code.eval_string (" List ")' Nhưng tôi tưởng tượng nó không phải là cách an toàn nhất để làm điều đó –

+3

Kiểm tra 'Module.concat/2' và' Module.split/1'. –

Các vấn đề liên quan