作为万灵药docs说:
...Access transparently ignores nil values:
iex> keywords = [a: 1, b: 2]
iex> keywords[:c][:unknown]
nil
这对我来说似乎容易出错。我宁愿看
nil[key]
失败而不是返回 nil
.我很确定语言开发人员选择这条路线是有充分理由的。那是什么原因?
最佳答案
nil
不实现 Access
行为( nil
是原子 FWIW。)
发生的事情是:Access.fetch(nil, whatever)
返回 :error
和 get
wraps :error
to the default value传递给 Access.get/3
作为第三个参数。
“为什么”这个问题最好向 José 提出,我能想到的唯一想法是:在深度嵌套结构的情况下,这种行为简化了代码。
此外,这是第一级 map 访问的默认行为:
iex> %{a: 42}[:b]
nil
关于elixir - 为什么 Elixir 的 nil 实现了 Access 行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44755332/