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​个元素的新列表,然后我们将其全部相加。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号