Elixir语言中 Registry.match
相关用法介绍如下。
用法:
match(registry, key, pattern, guards \\ [])
(从 1.4.0 开始)
@spec match(registry(), key(), match_pattern(), guards()) :: [{pid(), term()}]
在 registry
中的给定 key
下返回与 pattern
匹配的 {pid, value}
对。
Pattern 必须是与注册表中存储的值的结构相匹配的原子或元组。原子:_
可用于忽略给定值或元组元素,而原子:"$1"
可用于将部分模式临时分配给变量以供后续比较。
可选地,可以传递保护条件列表以进行更精确的匹配。每个守卫都是一个元组,它说明了应该由模式的指定部分通过的检查。例如,$1 > 1
保护条件将表示为 {:>, :"$1", 1}
元组。请注意,保护条件仅适用于已分配的变量,如 :"$1"
、 :"$2"
等。避免使用特殊匹配变量 :"$_"
和 :"$$"
,因为它可能无法按预期工作。
如果没有匹配,将返回一个空列表。
对于唯一的注册表,单个分区查找是必要的。对于重复的注册表,必须查找所有分区。
例子
在下面的示例中,我们在重复注册表中的相同键下注册当前进程,但具有不同的值:
iex> Registry.start_link(keys: :duplicate, name: Registry.MatchTest)
iex> {:ok, _} = Registry.register(Registry.MatchTest, "hello", {1, :atom, 1})
iex> {:ok, _} = Registry.register(Registry.MatchTest, "hello", {2, :atom, 2})
iex> Registry.match(Registry.MatchTest, "hello", {1, :_, :_})
[{self(), {1, :atom, 1}}]
iex> Registry.match(Registry.MatchTest, "hello", {2, :_, :_})
[{self(), {2, :atom, 2}}]
iex> Registry.match(Registry.MatchTest, "hello", {:_, :atom, :_}) |> Enum.sort()
[{self(), {1, :atom, 1}}, {self(), {2, :atom, 2}}]
iex> Registry.match(Registry.MatchTest, "hello", {:"$1", :_, :"$1"}) |> Enum.sort()
[{self(), {1, :atom, 1}}, {self(), {2, :atom, 2}}]
iex> guards = [{:>, :"$1", 1}]
iex> Registry.match(Registry.MatchTest, "hello", {:_, :_, :"$1"}, guards)
[{self(), {2, :atom, 2}}]
iex> guards = [{:is_atom, :"$1"}]
iex> Registry.match(Registry.MatchTest, "hello", {:_, :"$1", :_}, guards) |> Enum.sort()
[{self(), {1, :atom, 1}}, {self(), {2, :atom, 2}}]
相关用法
- Elixir Registry.meta用法及代码示例
- Elixir Registry.count_match用法及代码示例
- Elixir Registry.lookup用法及代码示例
- Elixir Registry.unregister_match用法及代码示例
- Elixir Registry.register用法及代码示例
- Elixir Registry.values用法及代码示例
- Elixir Registry.put_meta用法及代码示例
- Elixir Registry.keys用法及代码示例
- Elixir Registry.start_link用法及代码示例
- Elixir Registry.unregister用法及代码示例
- Elixir Registry.delete_meta用法及代码示例
- Elixir Registry.count用法及代码示例
- Elixir Registry.select用法及代码示例
- Elixir Registry.update_value用法及代码示例
- Elixir Registry用法及代码示例
- Elixir Regex.run用法及代码示例
- Elixir Regex.names用法及代码示例
- Elixir Regex.named_captures用法及代码示例
- Elixir Regex.match?用法及代码示例
- Elixir Regex.escape用法及代码示例
- Elixir Regex用法及代码示例
- Elixir Regex.compile用法及代码示例
- Elixir Regex.split用法及代码示例
- Elixir Regex.source用法及代码示例
- Elixir Regex.replace用法及代码示例
注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Registry.match(registry, key, pattern, guards \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。