Elixir語言中 Enumerable
相關用法介紹如下。
當您調用
模塊中的函數時,第一個參數通常是必須實現此協議的集合。例如,表達式Enum
Enum.map([1, 2, 3], &(&1 * 2))
調用
來執行減少操作,該操作通過在集合中的每個元素上調用映射函數Enumerable.reduce/3
&(&1 * 2)
並使用累積列表使用該元素來構建映射列表。
在內部,
實現如下:Enum.map/2
def map(enumerable, fun) do
reducer = fn x, acc -> {:cont, [fun.(x) | acc]} end
Enumerable.reduce(enumerable, {:cont, []}, reducer) |> elem(1) |> :lists.reverse()
end
請注意,用戶提供的函數被包裝到
函數中。 reducer/0
函數必須在每一步之後返回一個標記的元組,如 reducer/0
類型中所述。最後, acc/0
返回 Enumerable.reduce/3
。result/0
該協議使用標記元組在 reducer 函數和實現該協議的數據類型之間交換信息。這允許高效地枚舉資源,例如文件,同時還保證資源將在枚舉結束時關閉。該協議還允許暫停枚舉,這在需要在許多可枚舉之間進行交錯時很有用(如在zip/1
和zip/2
函數中)。
該協議需要實現四個函數,
、reduce/3
、count/1
和member?/2
。該協議的核心是slice/1
函數。所有其他函數都作為數據結構的優化路徑存在,可以在比線性時間更好的時間內實現某些屬性。reduce/3
相關用法
- Elixir Enumerable.reduce用法及代碼示例
- Elixir Enum.unzip用法及代碼示例
- Elixir Enum.min_max用法及代碼示例
- Elixir Enum.reduce_while用法及代碼示例
- Elixir Enum.at用法及代碼示例
- Elixir Enum.split_with用法及代碼示例
- Elixir Enum用法及代碼示例
- Elixir Enum.dedup用法及代碼示例
- Elixir Enum.sum用法及代碼示例
- Elixir Enum.zip用法及代碼示例
- Elixir Enum.find_value用法及代碼示例
- Elixir Enum.product用法及代碼示例
- Elixir Enum.map_join用法及代碼示例
- Elixir Enum.zip_with用法及代碼示例
- Elixir Enum.intersperse用法及代碼示例
- Elixir Enum.flat_map用法及代碼示例
- Elixir Enum.count用法及代碼示例
- Elixir Enum.fetch用法及代碼示例
- Elixir Enum.frequencies用法及代碼示例
- Elixir Enum.drop用法及代碼示例
- Elixir Enum.slice用法及代碼示例
- Elixir Enum.max_by用法及代碼示例
- Elixir Enum.zip_reduce用法及代碼示例
- Elixir Enum.random用法及代碼示例
- Elixir Enum.empty?用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Enumerable。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。