如何在长生不老药

How to forEach in Elixir

本文关键字:长生不老      更新时间:2023-09-26

如何在Elixir中获取每个元素?在JavaScript(和大多数语言都有类似的)中,我可以遍历列表中的各种项,并做一些有副作用的事情,比如输出到控制台。

[1,2,3].forEach(function(num) {
    console.log(num);
});
//=> 1
//=> 2
//=> 3

在elixir中也有类似的吗?

遍历集合通常由Enum模块处理。如果你想产生副作用,你要找的就是Enum.each/2

Enum.each/2函数有两个参数:你的集合和一个在集合的每个成员上运行的函数。

一样:

iex(3)> Enum.each([1, 2, 3], fn x -> IO.puts x end)
1
2
3
:ok

我最近写了一篇关于这个的博客文章,其中有更多的细节。这篇文章比较了Elixir和Ruby,但同样的逻辑也适用于JavaScript。

一种选择是使用推导式:

for item <- items do
  IO.inspect(item)
end

另一个选项是枚举:

Enum.each items, fn(item) ->
  IO.inspect(item)
end

另一种选择是使用Enum.map/2Enum.each/2总是返回:ok,而map/2遍历列表并返回新值(相当于Javascript的Array.map)

iex(3)> Enum.map([1, 2, 3], fn x -> x * x end)
[1, 4, 9]

如果您特别想使用foreach,您可以使用Erlang的foreach/2:

 :lists.foreach(fn a -> IO.puts a + a end, [1,2,3])
 # 2
 # 4
 # 6