Здесь можно использовать reduce
, но вы должны правильно соединиться.Возвращаемое значение каждой итерации отправляется в следующее:
(0..10).reduce([ ]) do |x, y|
x << y if (y.odd?)
x
end
Поскольку эта цепочка может раздражать, поскольку вещь, которую вы цепляете, никогда не меняется, есть альтернатива:
(0..10).each_with_object([ ]) do |y, x|
x << y if (y.odd?)
end
Где каждыйround x
- это всегда "объект", который передается каждый раз и в конечном итоге возвращается.
Еще проще:
(0..10).select(&:odd?)
Где это просто фильтрует, чтобы захватить все нечетные значения, нет необходимостиобойти временный массив.