gpt4 book ai didi

elixir - Elixir 有没有办法对传递给函数的 nil 参数进行模式匹配?

转载 作者:行者123 更新时间:2023-12-01 07:06:31 24 4
gpt4 key购买 nike

有没有办法对作为参数传递给函数的映射中的 nil 值进行模式匹配?

基本上,如果 token 在下面的代码中为零,我想模式匹配并调用函数 2。如果不编写 2 个不同命名的函数和一个 case 语句,我似乎无法做到这一点。

def my_stuff(%{part: "snippets", possible_nil_token: token}), do: IO.puts "non nil"  #function 1

def my_stuff(%{part: "snippets", possible_nil_token: nil}), do: IO.puts "nil" #function 2

最佳答案

不确定我是否理解正确,但基本上,在 Elixir 中定义函数的顺序很重要。

先例是从上到下。这意味着您定义函数的方式将始终意味着第一个函数将始终匹配,因为 token 的值可以匹配任何值。

但是,如果您交换它们并拥有 nil检查功能,这将首先进行测试。

例如。

defmodule Match do
def test(%{part: "snippets", possible_nil_token: nil}), do: IO.puts "nil"
def test(%{part: "snippets", possible_nil_token: token}), do: IO.puts "non-nil"
end

鉴于上面的代码,我可以轻松地将它传递给 nil 并让它与第一个函数匹配:
iex(1)> Match.test(%{part: "snippets", possible_nil_token: nil})
nil
:ok
iex(2)> Match.test(%{part: "snippets", possible_nil_token: %{val1: "token1"}})
non-nil
:ok

关于elixir - Elixir 有没有办法对传递给函数的 nil 参数进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40710745/

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