當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Elixir Kernel.match?用法及代碼示例


Elixir語言中 Kernel.match? 相關用法介紹如下。

用法:

match?(pattern, expr)
(宏)

檢查右側(表達式)是否與左側(模式)匹配的便捷宏。

例子

iex> match?(1, 1)
true

iex> match?({1, _}, {1, 2})
true

iex> map = %{a: 1, b: 2}
iex> match?(%{a: _}, map)
true

iex> a = 1
iex> match?(^a, 1)
true

match?/2 在過濾或查找枚舉值時非常有用:

iex> list = [a: 1, b: 2, a: 3]
iex> Enum.filter(list, &match?({:a, _}, &1))
[a: 1, a: 3]

保護子句也可以用於匹配:

iex> list = [a: 1, b: 2, a: 3]
iex> Enum.filter(list, &match?({:a, x} when x < 2, &1))
[a: 1]

但是,在匹配中分配的變量在函數調用之外將不可用(與使用 = 運算符的常規模式匹配不同):

iex> match?(_x, 1)
true
iex> binding()
[]

此外,請記住 pin 運算符匹配 values ,而不是 patterns

match?(%{x: 1}, %{x: 1, y: 2})
#=> true

attrs = %{x: 1}
match?(^attrs, %{x: 1, y: 2})
#=> false

pin 運算符將使用 ===/2 檢查值是否相等,而模式在匹配映射、列表等時有自己的規則。這種行為並非特定於 match?/2 。以下代碼也會引發異常:

attrs = %{x: 1}
^attrs = %{x: 1, y: 2}
#=> (MatchError) no match of right hand side value: %{x: 1, y: 2}

相關用法


注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.match?(pattern, expr)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。