Небольшое отклонение от решения Джеда, которое не является излишне сложным, но более кратким ИМХО.
Использование compact
и inject
(самый распространенный синоним reduce
) не сложныи тщательно используется программистами на Ruby:
amt = [alt_tax, alt_freight, misc1_amt, misc2_amt].inject(alt_inv) do |result, attribute|
result - (attribute || 0)
end
или:
amt = alt_inv - [alt_freight, misc1_amt, misc2_amt].compact.inject{|sum, n| sum + n }
, который является альтернативным способом написания inject(&:+)
, если вам неудобен этот синтаксис.Если вы используете Rails, вы можете заменить инъекцию методом sum
или реализовать его самостоятельно .