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


Elixir Registry.count_match用法及代码示例


Elixir语言中 Registry.count_match 相关用法介绍如下。

用法:

count_match(registry, key, pattern, guards \\ [])
(从 1.7.0 开始)
@spec count_match(registry(), key(), match_pattern(), guards()) :: non_neg_integer()

返回 registry 中给定 key 下与 pattern 匹配的 {pid, value} 对的数量。

Pattern 必须是与注册表中存储的值的结构相匹配的原子或元组。原子:_ 可用于忽略给定值或元组元素,而原子:"$1" 可用于将部分模式临时分配给变量以供后续比较。

可选地,可以传递保护条件列表以进行更精确的匹配。每个守卫都是一个元组,它说明了应该由模式的指定部分通过的检查。例如,$1 > 1 保护条件将表示为 {:>, :"$1", 1} 元组。请注意,保护条件仅适用于已分配的变量,如 :"$1":"$2" 等。避免使用特殊匹配变量 :"$_":"$$" ,因为它可能无法按预期工作。

如果没有匹配,将返回零。

对于唯一的注册表,单个分区查找是必要的。对于重复的注册表,必须查找所有分区。

例子

在下面的示例中,我们在重复注册表中的相同键下注册当前进程,但具有不同的值:

iex> Registry.start_link(keys: :duplicate, name: Registry.CountMatchTest)
iex> {:ok, _} = Registry.register(Registry.CountMatchTest, "hello", {1, :atom, 1})
iex> {:ok, _} = Registry.register(Registry.CountMatchTest, "hello", {2, :atom, 2})
iex> Registry.count_match(Registry.CountMatchTest, "hello", {1, :_, :_})
1
iex> Registry.count_match(Registry.CountMatchTest, "hello", {2, :_, :_})
1
iex> Registry.count_match(Registry.CountMatchTest, "hello", {:_, :atom, :_})
2
iex> Registry.count_match(Registry.CountMatchTest, "hello", {:"$1", :_, :"$1"})
2
iex> Registry.count_match(Registry.CountMatchTest, "hello", {:_, :_, :"$1"}, [{:>, :"$1", 1}])
1
iex> Registry.count_match(Registry.CountMatchTest, "hello", {:_, :"$1", :_}, [{:is_atom, :"$1"}])
2

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Registry.count_match(registry, key, pattern, guards \\ [])。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。