Elixir - 不以大写字母开头的原子

Kra*_*rab 6 erlang elixir

在灵药中,原子应该从一开始:,所以为什么所有以大写字母开头的文字都被视为原子呢?

IO.puts is_atom(Foo) # true, why????
IO.puts is_atom(foo) # error undefined function
IO.puts is_atom(:foo) # true
Run Code Online (Sandbox Code Playgroud)

小智 11

正如您在此处看到的,以大写字母开头的标识符被视为原子别名.在你的情况下,Foo是一个别名:'Elixir.Foo'是一个原子.

  • 仅供参考:模块名称是Erlang VM中的原子.因此,例如,你可以在模块中调用函数sleep/1:这样在Elixir :: timer.sleep(1000)中.Elixir模块是以大写字母开头的原子,自动添加前缀"Elixir".所以从Erlang你会打电话给'Elixir.Supervisor':start_link(...)和Elixir:Supervisor.start_link(...) (3认同)