In Ruby raramente scrivi un ciclo for. Il modulo Enumerable ti dà metodi espressivi che dicono cosa vuoi, non come ottenerlo.
numeri = [1, 2, 3, 4, 5, 6]
numeri.map { |n| n * 2 } # => [2, 4, 6, 8, 10, 12]
numeri.select { |n| n.even? } # => [2, 4, 6]
numeri.reduce(0) { |sum, n| sum + n } # => 21
numeri.sum # => 21 (scorciatoia)
map trasforma, select filtra, reduce aggrega. Si concatenano: numeri.select(&:even?).map { |n| n ** 2 }.
Quel &:even? è la forma compatta di { |n| n.even? }. Una volta presa la mano, i cicli manuali ti sembreranno rumore inutile.