dictionary - Elixir:模式匹配对元组和映射的工作方式不同

标签 dictionary pattern-matching tuples elixir

在 Elixir 中,如果我尝试对以下两个元组进行模式匹配:

{a} = {1, 2}

我得到一个匹配错误。但是如果我对两张 map 做同样的事情:
%{x: a} = %{x: 1, y: 2}

它工作正常,a绑定(bind)到 1。我可以看到为什么匹配两个元组会出错,但为什么匹配映射不会出错?

最佳答案

在第一个示例中,您尝试将单个元素元组与两个元素元组进行匹配。在第二个示例中,您在左右映射中的 :x 键上进行匹配。

编辑:我应该澄清有关 Elixir 中数据结构和模式匹配的规则。

在元组上进行匹配时,您需要提供一个匹配整个元组结构的模式。您可以使用 _ ,这是“包罗万象”的模式,但您仍然需要为元组的所有元素提供它。在列表上匹配时,您必须在使用 [a, b, c] = [1, 2, 3] 时匹配所有元素。语法,或在头部和尾部,使用 [h|t] = [1, 2, 3]句法。但是,在匹配 map 时,您可以匹配 map 中的一个或多个键,这将为您提供 %{a: b} = %{a: :foo, b: :bar}句法。

数据结构之间的语义有些不同,但都是相当常识的。元组规则的存在是因为两个元组不能相同,除非它们具有相同数量的元素,列表具有相同的限制,但是由于列表的语义,访问列表的头元素是使用时最常见的操作他们,因此 [h|t]句法。然而,映射可以基于特定的键进行匹配,因此元素的数量无关紧要,只要匹配的双方都包含相同的键和值的可选模式,那么它就是成功的匹配。

关于dictionary - Elixir:模式匹配对元组和映射的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23693173/

相关文章:

c# - 使用 PowerShell 在声明时初始化字典

python - x, = ... - 这个尾随逗号是逗号运算符吗?

r - 使用 R 匹配电子邮件格式

python - 列表,元组和统计程序尝试-除 block 错误

python - 如何从元组列表中创建变量并将其设置为类?

Java:将 List<List> 转换为 Map

python - 为什么修改字典中的键也会修改分配给它们的数组? (Python)

python - 从字典内的多个集合中获取值

scala - 这是一个类型检查器错误吗?

python - 选择名称遵循 pandas 中给定模式的 DataFrame 列