当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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