在Elixir中是否有任何方式在传递给函数的nil参数上进行模式匹配?

Non*_*ona 3 elixir

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

基本上如果令牌在下面的代码中是nil,我想模式匹配并调用函数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
Run Code Online (Sandbox Code Playgroud)

Har*_*cas 17

不确定我是否理解你,但基本上,在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
Run Code Online (Sandbox Code Playgroud)

鉴于上面的代码,我可以轻松地传递它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
Run Code Online (Sandbox Code Playgroud)