Вы можете передать начальное значение суммы в качестве аргумента.В этом случае начальное значение должно быть пустым массивом.Опять же, вам нужно убедиться, что сумма является последней оцененной строкой в блоке.
Вам НУЖНО передать начальное значение, потому что, если вы этого не сделаете, первое значение коллекции :one
автоматически присваиваетсяsum
, поэтому sum <<
потерпит неудачу (символы не поддерживают <<
)
В итоге ... если значение по умолчанию отсутствует, :one
присваивается сумме, а блок оценивается только для [:two, :three]
с начальным значением, блок вычисляется для каждого члена коллекции.
a = [:one,:two,:three] # => [:one, :two, :three]
a.inject([]) do |sum, v|
sum << v if v != :one
sum
end