在Elixir中没有vs nil

时间:2017-11-11 09:59:13

标签: elixir

Elixir中Nonenil之间的区别是什么?

如果我理解正确,请参阅Elixir的文档nil是一个代表缺乏价值的文字。

但即使None似乎代表相同,但我找不到任何文件。

2 个答案:

答案 0 :(得分:3)

正如@JustMichael所说,None表现得与你想象的完全不同。 灵长类动物中的None只是一个没有任何进一步含义的原子,因为你可以通过iex中的i(variable)确定。

iex(1)> i(None)
Term
  None
Data type
  Atom
Raw representation
  :"Elixir.None"
Reference modules
  Atom
Implemented protocols
  IEx.Info, Inspect, String.Chars, List.Chars
iex(2)> is_nil(None)
false

但是看nil

iex(3)> i(nil)
Term
  nil
Data type
  Atom
Reference modules
  Atom
Implemented protocols
  IEx.Info, Inspect, String.Chars, List.Chars
iex(4)> is_nil(nil)
true

答案 1 :(得分:0)

None是一个模块名称,一个原子,在控制流程中不会被评估为假。
nil是一个在控制流中评估为false的原子。

iex(1)> if None, do: :ok, else: :ko
:ok
iex(2)> if nil, do: :ok, else: :ko
:ko