【问题标题】:How to forEach in Elixir如何在 Elixir 中使用 forEach
【发布时间】:2017-02-09 10:55:47
【问题描述】:
你如何在 Elixir 中为每个人提供服务?在 JavaScript 中(大多数语言都有对应的),我可以遍历列表中的各个项目并执行一些具有副作用的操作,例如输出到控制台。
[1,2,3].forEach(function(num) {
console.log(num);
});
//=> 1
//=> 2
//=> 3
灵丹妙药有没有等价物?
【问题讨论】:
标签:
javascript
foreach
elixir
【解决方案1】:
遍历集合最常使用Enum 模块处理。如果你想产生副作用,Enum.each/2 就是你要找的东西。
Enum.each/2 函数有两个参数:你的集合和一个在集合的每个成员上运行的函数。
像这样:
iex(3)> Enum.each([1, 2, 3], fn x -> IO.puts x end)
1
2
3
:ok
我最近写了一封blog post 来讨论这个问题,其中包含更多细节。这篇文章是 Elixir 和 Ruby 之间的比较,但同样的逻辑也适用于 JavaScript。
【解决方案2】:
一种选择是使用推导:
for item <- items do
IO.inspect(item)
end
另一种选择是枚举:
Enum.each items, fn(item) ->
IO.inspect(item)
end
【解决方案3】:
另一种选择是使用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]
【解决方案4】:
如果你想专门使用foreach,你可以使用Erlang的foreach/2:
:lists.foreach(fn a -> IO.puts a + a end, [1,2,3])
# 2
# 4
# 6