gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:03:47 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com