for-loop - enum - for each elixir
Llenar una lista con un for-loop (1)
En Elixir, no puede cambiar el valor al que hace referencia su variable, como se explica en ¿Las variables de Elixir son realmente inmutables? . En este caso, no es un "bucle", es una lista de comprensión .
Puede asignar el resultado de una comprensión con:
new_data = for data <- old_data do
data
end
En tu línea:
new_data = List.insert_at(new_data, -1, data)
La variable new_data
es local al alcance de la comprensión. Puede usar su valor new_data
anterior, pero no podrá volver a enlazar para el alcance externo. Por eso new_data
sigue siendo []
después de tu comprensión. Las reglas de alcance se explican en http://elixir-lang.readthedocs.org/en/latest/technical/scoping.html
¿Por qué no puedo completar una lista con este simple for-loop?
new_data = []
for data <- old_data do
new_data = List.insert_at(new_data, -1, data)
end
Después de esta operación, mi lista new_data
aún está vacía, aunque el ciclo se ejecuta N veces.