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

标签 elixir

作为万灵药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)返回 :errorget 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/

相关文章:

mysql - Phoenix-Framework : transform, 在创建子模型时关联和不检查 Ecto 父模型

xml - 如何处理 sweet_xml 中的不区分大小写?

elixir - 使用 Ecto 的时间戳向现有表添加时间戳

math - 如何在Erlang中计算5 ^ 262144

macos - Emacs 上的 Elixir : exec erl not found

ruby-on-rails - 在 Web 应用程序中使用哪些框架/技术来实现实时功能?

elixir - 如何从字符串中删除 '\u0002' 、 '\r\n' 和 '\u0003' ?

compiler-errors - 警告 : Ecto. Repo.insert_all/3 未定义或私有(private)

elixir - 如何在 Sublime Text 3 上设置 Elixir

elixir - 在 Elixir 中,为什么不使用 case 语句而不是多个函数重载?