如何在Elixir中获得

wil*_*des 11 javascript foreach elixir

你是如何在Elixir中获得的?在JavaScript中(大多数语言都有等价的),我可以遍历列表中的各个项目并执行一些副作用,例如输出到控制台.

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

//=> 1
//=> 2
//=> 3
Run Code Online (Sandbox Code Playgroud)

在长生不老药中是否有相同的含量?

小智 18

迭代通过集合通常用Enum模块处理. Enum.each/2如果你想产生副作用,那就是你要找的东西.

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

像这样:

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

我最近写了一篇关于这篇文章的博文,详细介绍了这一点.该帖子是Elixir和Ruby之间的比较,但同样的逻辑适用于Javascript.


Vol*_*ldy 9

一种选择是使用理解:

for item <- items do
  IO.inspect(item)
end
Run Code Online (Sandbox Code Playgroud)

另一种选择是枚举:

Enum.each items, fn(item) ->
  IO.inspect(item)
end
Run Code Online (Sandbox Code Playgroud)


She*_*yar 5

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

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


Mah*_*dam 5

如果你想具体使用foreach,你可以使用 Erlang 的foreach/2:

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