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