有没有办法在作为参数传递给函数的映射中的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)
| 归档时间: |
|
| 查看次数: |
3156 次 |
| 最近记录: |