Elixir 积极与懒惰
2023-12-15 13:50 更新
Enum
模块中的所有函数都是积极的。许多函数接受了一个枚举体并返回了一个列表:
iex> odd? = &(rem(&1, 2) != 0)
#Function<6.80484245/1 in :erl_eval.expr/5>
iex> Enum.filter(1..3, odd?)
[1, 3]
这意味着当使用Enum
进行多次操作时,每个操作都在生成一个中间列表,直到获得最终结果:
iex> 1..100_000 |> Enum.map(&(&1 * 3)) |> Enum.filter(odd?) |> Enum.sum
7500000000
上述例子用到了管道操作符。我们以一个范围开始,让后将范围中的每个数乘以3.第一个操作将会创造并返回一个100_000
个元素的列表。之后我们留下了列表中的所有奇数,并生成了一个有50_000
个元素的新列表,然后我们将其全部相加。
以上内容是否对您有帮助:
更多建议: