2016-09-30 4 views
2

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

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

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

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

+2

'for'? http://elixir-lang.org/getting-started/comprehensions.html – Dogbert

ответ

7

Итерации через коллекцию чаще всего обрабатываются модулем 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.

0

Другим вариантом является использование Enum.map/2. Enum.each/2 всегда возвращает :ok, в то время как map/2 перебирает список и возвращает новые значения (эквивалент Array.map в JavaScript)

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

Одним из вариантов было бы использовать постижений:

for item <- items do 
    IO.inspect(item) 
end 

Другой вариант перечисления:

Enum.each items, fn(item) -> 
    IO.inspect(item) 
end 
0

Если вы хотите использовать foreach конкретно, лет u мог использовать Erlang's foreach/2:

:lists.foreach(fn a -> IO.puts a + a end, [1,2,3]) 
# 2 
# 4 
# 6 
Смежные вопросы