【问题标题】: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/2Enum.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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-07-02
          • 2017-08-31
          • 1970-01-01
          • 2015-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-17
          相关资源
          最近更新 更多