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 Kernel.macro_exported?用法及代碼示例
- Elixir Kernel.make_ref用法及代碼示例
- Elixir Kernel.map_size用法及代碼示例
- Elixir Kernel.max用法及代碼示例
- Elixir Kernel.min用法及代碼示例
- Elixir Kernel.SpecialForms.case用法及代碼示例
- Elixir Kernel.round用法及代碼示例
- Elixir Kernel.left / right用法及代碼示例
- Elixir Kernel.put_in用法及代碼示例
- Elixir Kernel.tl用法及代碼示例
- Elixir Kernel.left - right用法及代碼示例
- Elixir Kernel.tuple_size用法及代碼示例
- Elixir Kernel.defexception用法及代碼示例
- Elixir Kernel.to_charlist用法及代碼示例
- Elixir Kernel.base ** exponent用法及代碼示例
- Elixir Kernel.left !== right用法及代碼示例
- Elixir Kernel.if用法及代碼示例
- Elixir Kernel.spawn_monitor用法及代碼示例
- Elixir Kernel.to_string用法及代碼示例
- Elixir Kernel.length用法及代碼示例
- Elixir Kernel.first..last用法及代碼示例
- Elixir Kernel.SpecialForms.%{}用法及代碼示例
- Elixir Kernel.SpecialForms.for用法及代碼示例
- Elixir Kernel.then用法及代碼示例
- Elixir Kernel.spawn用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Kernel.match?(pattern, expr)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。