【发布时间】:2019-07-29 04:59:39
【问题描述】:
我正在阅读精彩的 Joy of Elixir,我正试图围绕模式匹配示例中的操作顺序展开思考。
我有清单
crew = [
%{name: "mal", age: 40},
%{name: "zoey", age: 36},
]
现在我可以使用模式匹配来获取列表的第一个元素,并将名称分配给不同的变量,例如
[first = %{name: first_name} | others] = crew
我了解crew 中的第一个元素已分配给first,而first 的name 已分配给first_name:
iex> first
%{age: 40, name: "mal"}
iex> first_name
"mal"
根据示例,我还可以将名称从右到左分配给另一个变量:
%{name: first_name2} = first
但是当我从左到右尝试时同样失败:
iex> first = %{name: first_name3}
** (CompileError) iex:33: undefined function first_name3/0
(stdlib) lists.erl:1354: :lists.mapfoldl/3
(stdlib) lists.erl:1355: :lists.mapfoldl/3
我的问题是:为什么从左到右分配在列表匹配中可以,但在列表匹配之外失败?
【问题讨论】:
-
变量必须已经分配在右侧。
-
@denis.peplin 那么为什么
[first = %{name: first_name} | others] = crew中不是这种情况?first_name在first的右侧 -
crew在此提供数据