I have this line, where the input variables in the array can come in any form — string, integer, fixnum, float (ps, I know that sales_price as a currency should really be BigDecimal or the like on instantiation, this is just to illustrate my question):
[quantity, sales_price].each { |multiplicand| multiplicand = BigDecimal.new(multiplicand.to_s) if multiplicand.class != BigDecimal}
So if (rdb:1) quantity = 50 (rdb:1) quantity.class Fixnum (rdb:1) sales_price = 50 (rdb:1) sales_price.class Float
And I call this: (rdb:1) [quantity, sales_price].each { |multiplicand| multiplicand = BigDecimal.new(multiplicand.to_s) if multiplicand.class != BigDecimal} [50, 1.99]
Why don’t the variables change? (rdb:1) quantity.class Fixnum (rdb:1) sales_price.class Float (rdb:1)
Because if I do this: [quantity, sales_price].map { |multiplicand| multiplicand = BigDecimal.new(multiplicand.to_s) if multiplicand.class != BigDecimal}
I do get: [#BigDecimal:3b4f4f8,‘0.5E2’,4(8), #BigDecimal:3b4f46c,‘0.199E1’,8(8)]
… so I know that the logic is working.
Shouldn’t an operation in an each change the input? — I thought the input should be by ref.