"-6ren">
gpt4 book ai didi

elixir - 模式匹配映射作为函数参数

转载 作者:行者123 更新时间:2023-12-04 22:29:13 25 4
gpt4 key购买 nike

我在编写函数子句时遇到了麻烦,我需要对映射进行模式匹配并保留它以在函数中使用。我无法理解语法是什么。基本上我想要这样的东西:

def check_data (arg1, %{"action" => "action1", ...}, arg2) do
# access other keys of the structure
end

我确信这是非常基本的,但它似乎是我无法理解的。我已经阅读了许多教程,但似乎无法找到处理此用例的教程。

最佳答案

要匹配 map 的某些键并将整个 map 存储在变量中,您可以将 = variable 与模式一起使用:

def check_data(arg1, %{"action" => "action1"} = map, arg2) do
end

此函数将匹配任何包含键 "action1"(以及任何其他键/值对)中的 "action" 作为第二个参数的映射,并将整个映射存储在 map 中:
iex(1)> defmodule Main do
...(1)> def check_data(_arg1, %{"action" => "action1"} = map, _arg2), do: map
...(1)> end
iex(2)> Main.check_data :foo, %{}, :bar
** (FunctionClauseError) no function clause matching in Main.check_data/3
iex:2: Main.check_data(:foo, %{}, :bar)
iex(2)> Main.check_data :foo, %{"action" => "action1"}, :bar
%{"action" => "action1"}
iex(3)> Main.check_data :foo, %{"action" => "action1", :foo => :bar}, :bar
%{:foo => :bar, "action" => "action1"}

关于elixir - 模式匹配映射作为函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39720900/

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