【问题标题】:Pattern matching with pinned variables fail与固定变量的模式匹配失败
【发布时间】:2017-11-03 11:45:18
【问题描述】:

为什么这种模式匹配会通过:

%{"asd" => %{}} = %{"asd" => %{"qwe" => ""}}

虽然这个没有(MatchError):

x = %{} %{"asd" => ^x} = %{"asd" => %{"qwe" => ""}}

?

编辑:发现pin操作符的意思是必须等于。现在,我如何匹配到这张地图中的x 变量?

【问题讨论】:

  • 您不能将映射变量转换为模式(至少不能没有eval)。你想在这里达到什么目的?也许有更好的解决方案。
  • 好的,所以映射变量和模式不是一回事。直到现在才知道:)但这是有道理的。
  • 已回答您编辑的问题。

标签: elixir


【解决方案1】:

根据定义,左侧的固定变量值必须等于右侧的对应值 (tutorial)。

所以下面的匹配会起作用:

x = %{"qwe" => ""}
%{"asd" => ^x} = %{"asd" => %{"qwe" => ""}}

x 任何其他值,匹配将失败并返回MatchError

要分配 x,只需省略 pin 运算符,即删除 ^

【讨论】:

  • 省略 pin 操作符将不匹配 x,它会将 %{"qwe" => ""} 分配给 x 变量。
  • @Darxis,你是对的,我已经编辑了我的更新以提及“分配”,而不是“匹配”。在这个答案中,示例显示了一个可能的匹配项(对于x = %{"qwe" => ""})。正如我所说,任何其他 x 值在右侧 %{"asd" => %{"qwe" => ""}} 匹配将不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
相关资源
最近更新 更多