Как forEach в Elixir

#javascript #foreach #elixir

#javascript #foreach #elixir

Вопрос:

Как вы forEach в Elixir? В JavaScript (и в большинстве языков есть эквивалент) я могу перебирать различные элементы в списке и делать что-то с побочными эффектами, такими как вывод на консоль.

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

//=> 1
//=> 2
//=> 3
  

Есть ли эквивалент в elixir?

Комментарии:

1. for ? elixir-lang.org/getting-started/comprehensions.html

Ответ №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
  

Недавно я написал об этом сообщение в блоге, в котором более подробно. Сообщение представляет собой сравнение между 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’s foreach/2 :

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