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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。