當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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 \\ [])。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。