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.

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to