#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