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)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。