当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Elixir Stream.transform用法及代码示例


Elixir语言中 Stream.transform 相关用法介绍如下。

用法:

transform(enum, acc, reducer)
@spec transform(Enumerable.t(), acc, fun) :: Enumerable.t()
when fun: (element(), acc -> {Enumerable.t(), acc} | {:halt, acc}), acc: any()

转换现有流。

它需要一个累加器和一个接收每个流元素和一个累加器的函数。它必须返回一个元组,其中第一个元素是一个新流(通常是一个列表)或原子 :halt ,第二个元素是下一个元素(如果有的话)在两种情况下使用的累加器。

注意:此函数等效于 Enum.flat_map_reduce/3 ,除了此函数在处理流后不返回累加器。

例子

Stream.transform/3 很有用,因为它可以用作实现此模块中定义的许多函数的基础。例如,我们可以如下实现Stream.take(enum, n)

iex> enum = 1001..9999
iex> n = 3
iex> stream = Stream.transform(enum, 0, fn i, acc ->
...>   if acc < n, do: {[i], acc + 1}, else: {:halt, acc}
...> end)
iex> Enum.to_list(stream)
[1001, 1002, 1003]

相关用法


注:本文由纯净天空筛选整理自elixir-lang.org大神的英文原创作品 Stream.transform(enum, acc, reducer)。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。