Я читаю замечательную Радость эликсира и пытаюсь обернуть голову вокруг порядка операций в примере сопоставления с образцом.
У меня есть список
crew = [
%{name: "mal", age: 40},
%{name: "zoey", age: 36},
]
Теперь я могу использовать сопоставление с образцом, чтобы взять первый элемент списка и назначить имя другой переменной, например
[first = %{name: first_name} | others] = crew
Я понимаю, что первый элемент в crew
был присвоен first
, а name
из first
был присвоен 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
Мой вопрос: почему слева налевоПравильно ли присвоение ОК при сопоставлении списков, но не за пределами сопоставления списков?