【发布时间】:2016-09-25 13:54:17
【问题描述】:
我无法弄清楚这是如何工作的。以下是 Elixir 文档中的示例代码,以及我对它们如何工作的思考过程。如果有问题请告诉我。
# Code example from Elixir docs
users = [%{name: "john", age: 27}, %{name: "meg", age: 23}]
all = fn(:get, data, next) do
Enum.map(data, next)
end
get_in(users, [all, :age])
#=> [27, 23]
-
users与包含两个地图的列表匹配。 -
all与以:get, data, next为参数并执行Enum.map(data, next)的函数匹配。 -
Kernal.get_in(users, [all, :age])被调用。 - 由于其中一个键
all是一个函数,因此它被调用为all(:get, users, next)。 -
Enum.map遍历users的每个元素并在其上调用next,返回一个列表。 - 列表中每个用户的
:age键值作为列表返回。
这些是我基于此分析提出的问题:
-
next这个函数是什么?从来没有定义过,也没有提供过,怎么没有报错呢? - 总结一下,当
get_in以函数(本例中为all)作为键调用时,它从以下结果返回键的值(本例中为:age)是否正确那个功能? - 如果我在 2. 中的猜测是正确的,那么当该函数的结果不是字典类型并且没有键值对时会发生什么?它会引发错误吗?
【问题讨论】:
标签: elixir