Это связано с анонимной функцией?
Нет.
Или, может быть, специальный синтаксис для кортежей (которые в основном являются картами?)
Совсем нет :)
=
- оператор сопоставления, что означает, что RHO должен соответствовать LHO, в противном случае возникает MatchError
.
{:ok, _} = {:ok, 42}
#⇒ {:ok, 42}
{:ok, _} = :error
** (MatchError) no match of right hand side value: :error
->
следует читать как «Если что-то из внешней области, в зависимости от контекста, соответствует LHO, оцените RHO».
case :error do
{:ok, _} -> :never_reached
_ -> :we_matched_error_through_match_all_clause
end
#⇒ :we_matched_error_through_match_all_clause
¡NB! Обратите внимание (кредиты на D iego Echeverri за упоминание этого в комментариях), что если ни одно предложение не удалось сопоставить в примере ->
, выбрасывается MatchError
. Таким образом, =
может рассматриваться как точно соответствует этому! и ->
как соответствует по крайней мере одному из них и выполняет то, что указано в правой части ->
.
Примечание: «Кортежи, которые в основном являются картами», ни в коем случае не являются картами.