Elixir语言中 Registry.select
相关用法介绍如下。
用法:
select(registry, spec)
(从 1.9.0 开始)
@spec select(registry(), spec()) :: [term()]
选择使用完全匹配规范注册的键、pid 和值。
spec
由三部分元组的列表组成,形状为 [{match_pattern, guards, body}]
。
第一部分,匹配模式,必须是一个元组,它将匹配存储在注册表中的数据结构,即 {key, pid, value}
。原子:_
可用于忽略给定值或元组元素,而原子:"$1"
可用于临时将模式的一部分分配给变量以进行后续比较。这可以像 {:"$1", :_, :_}
一样组合。
第二部分,守卫,是允许过滤结果的条件列表。每个守卫都是一个元组,它说明了应该由模式的指定部分通过的检查。例如,$1 > 1
保护条件将表示为 {:>, :"$1", 1}
元组。请注意,保护条件仅适用于已分配的变量,如 :"$1"
、 :"$2"
等。
第三部分,主体,是返回条目的形状列表。与守卫一样,您可以访问分配的变量,例如 :"$1"
,您可以将其与硬编码值组合以自由调整条目的形状 请注意,元组必须包装在一个额外的元组中。要获得类似 %{key: key, pid: pid, value: value}
的结果格式,假设您在匹配部分按顺序绑定这些变量,您将提供类似 [%{key: :"$1", pid: :"$2", value: :"$3"}]
的主体。像守卫一样,您可以使用:element
之类的一些操作来修改输出格式。
不要使用特殊匹配变量 :"$_"
和 :"$$"
,因为它们可能无法按预期工作。
请注意,对于具有许多分区的大型注册表,这将是昂贵的,因为它通过连接所有分区来构建结果。
例子
此示例显示如何从注册表中获取所有内容。
iex> Registry.start_link(keys: :unique, name: Registry.SelectAllTest)
iex> {:ok, _} = Registry.register(Registry.SelectAllTest, "hello", :value)
iex> {:ok, _} = Registry.register(Registry.SelectAllTest, "world", :value)
iex> Registry.select(Registry.SelectAllTest, [{{:"$1", :"$2", :"$3"}, [], [{{:"$1", :"$2", :"$3"}}]}])
[{"world", self(), :value}, {"hello", self(), :value}]
获取注册表中的所有键。
iex> Registry.start_link(keys: :unique, name: Registry.SelectAllTest)
iex> {:ok, _} = Registry.register(Registry.SelectAllTest, "hello", :value)
iex> {:ok, _} = Registry.register(Registry.SelectAllTest, "world", :value)
iex> Registry.select(Registry.SelectAllTest, [{{:"$1", :_, :_}, [], [:"$1"]}])
["world", "hello"]
相关用法
- Elixir Registry.start_link用法及代码示例
- 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.unregister用法及代码示例
- Elixir Registry.delete_meta用法及代码示例
- Elixir Registry.count用法及代码示例
- Elixir Registry.meta用法及代码示例
- Elixir Registry.update_value用法及代码示例
- Elixir Registry.match用法及代码示例
- 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.select(registry, spec)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。