You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir中匹配Map为何不触发MatchError错误?

Elixir模式匹配:列表与Map的匹配差异解析

列表的严格匹配规则

看你写的这段代码:

[_] = [1,2,3]

模式[_]表示匹配长度恰好为1的列表,但右边的[1,2,3]是长度为3的列表,结构完全不匹配,所以触发了MatchError。

Elixir里列表的模式匹配是完全严格的:不仅每个位置的元素要符合对应模式,整个列表的长度也必须和模式一致。比如换成[first, _, third] = [1,2,3]就能成功匹配,因为两边长度相同,每个位置的占位符都能对应上。

Map的部分匹配特性

再看这段Map匹配的代码:

%{name: person_name} = %{name: "Fred", favorite_color: "Taupe"}

Map的模式匹配是部分匹配:只要左边模式里声明的所有键,在右边的Map中都存在且对应值能匹配,就算匹配成功,右边Map里的额外键不会影响结果。

这个模式只要求目标Map包含:name键,不管它还有没有favorite_color这类其他键。所以匹配成功后,person_name会被绑定为"Fred",同时整个表达式返回右边的完整Map,也就是你看到的%{name: "Fred", favorite_color: "Taupe"}。

核心差异总结

  • 列表模式:完全结构匹配,长度和每个元素位置都要严格对应;
  • Map模式:部分匹配,仅校验模式中指定的键,忽略额外键。

内容的提问来源于stack exchange,提问作者dinesh_pandikona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:00:11