为什么 Elixir 的 nil 实现了 Access 行为?

DNN*_*NNX 4 elixir

正如 Elixir文档所说:

...Access 透明地忽略 nil 值:

iex> keywords = [a: 1, b: 2]
iex> keywords[:c][:unknown]
nil
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很容易出错。我宁愿看到nil[key]失败也不愿回来nil

我很确定语言开发人员选择这条路线是有充分理由的。那是什么原因呢?

Ale*_*kin 5

nil不实现Access行为(nil是一个原子 FWIW。)

\n\n

发生的情况是:Access.fetch(nil, whatever)返回:errorget 包装:errorAccess.get/3到作为第三个参数传递的默认值。

\n\n

问题 \xe2\x80\x9cwhy\xe2\x80\x9d 最好向 Jose\xcc\x81 提出,我唯一能想到的是:这种行为在深度嵌套结构的情况下简化了代码。

\n\n

此外,这是第一级地图访问的默认行为:

\n\n
iex> %{a: 42}[:b]\nnil\n
Run Code Online (Sandbox Code Playgroud)\n