Elixir語言中 Access.filter
相關用法介紹如下。
用法:
filter(func)
(從 1.6.0 開始)
@spec filter((term() -> boolean())) ::
access_fun(data :: list(), current_value :: list())
返回一個函數,該函數訪問列表中與提供的謂詞匹配的所有元素。
返回的函數通常作為訪問器傳遞給
、 Kernel.get_in/2
和朋友。Kernel.get_and_update_in/3
例子
iex> list = [%{name: "john", salary: 10}, %{name: "francine", salary: 30}]
iex> get_in(list, [Access.filter(&(&1.salary > 20)), :name])
["francine"]
iex> get_and_update_in(list, [Access.filter(&(&1.salary <= 20)), :name], fn prev ->
...> {prev, String.upcase(prev)}
...> end)
{["john"], [%{name: "JOHN", salary: 10}, %{name: "francine", salary: 30}]}
也可用於從列表中彈出元素或列表中的鍵:filter/1
iex> list = [%{name: "john", salary: 10}, %{name: "francine", salary: 30}]
iex> pop_in(list, [Access.filter(&(&1.salary >= 20))])
{[%{name: "francine", salary: 30}], [%{name: "john", salary: 10}]}
iex> pop_in(list, [Access.filter(&(&1.salary >= 20)), :name])
{["francine"], [%{name: "john", salary: 10}, %{salary: 30}]}
如果沒有找到匹配項,則返回一個空列表,並且永遠不會調用更新函數
iex> list = [%{name: "john", salary: 10}, %{name: "francine", salary: 30}]
iex> get_in(list, [Access.filter(&(&1.salary >= 50)), :name])
[]
iex> get_and_update_in(list, [Access.filter(&(&1.salary >= 50)), :name], fn prev ->
...> {prev, String.upcase(prev)}
...> end)
{[], [%{name: "john", salary: 10}, %{name: "francine", salary: 30}]}
如果謂詞不是函數或元數不正確,則會引發錯誤:
iex> get_in([], [Access.filter(5)])
** (FunctionClauseError) no function clause matching in Access.filter/1
如果訪問的結構不是列表,則會引發錯誤:
iex> get_in(%{}, [Access.filter(fn a -> a == 10 end)])
** (RuntimeError) Access.filter/1 expected a list, got: %{}
相關用法
- Elixir Access.fetch用法及代碼示例
- Elixir Access.fetch!用法及代碼示例
- Elixir Access.all用法及代碼示例
- Elixir Access.key用法及代碼示例
- Elixir Access.get用法及代碼示例
- Elixir Access.key!用法及代碼示例
- Elixir Access.at!用法及代碼示例
- Elixir Access.at用法及代碼示例
- Elixir Access.elem用法及代碼示例
- Elixir Access.pop用法及代碼示例
- Elixir Access.get_and_update用法及代碼示例
- Elixir Access用法及代碼示例
- Elixir Application.get_env用法及代碼示例
- Elixir Application用法及代碼示例
- Elixir Agent.get_and_update用法及代碼示例
- Elixir Atom用法及代碼示例
- Elixir Atom.to_string用法及代碼示例
- Elixir Agent.get用法及代碼示例
- Elixir Atom.to_charlist用法及代碼示例
- Elixir Agent.cast用法及代碼示例
- Elixir Agent.start_link用法及代碼示例
- Elixir Agent.update用法及代碼示例
- Elixir Agent.stop用法及代碼示例
- Elixir Application.ensure_started用法及代碼示例
- Elixir Agent.start用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Access.filter(func)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。