On 3/5/07, vijay <[EMAIL PROTECTED]> wrote:
> Thank you Zeljko Filipin. That was an useful and an interesting '.pdf'.
>
> Thanks,
> Vijay.
For those interested in both history and the vagaries of OO
programming, the original issue was a problem I stumbled across and
mentioned on the list for people reviewing Brian's book. It's an
interesting issue, and a good thing to be aware of, if you aren't
already. For me, it comes up when I work with databases, since what
comes back from Ruby ODBC is almost always an AoA, and that's where I
got into trouble...
#########################################
require 'test/unit'
class TOY_CASE<Test::Unit::TestCase
def test_toy_test
aoa = [[1,2,3],[4,5,6]]
aoa.each do |arr|
arr.each do |item|
item = item.to_s
end
assert_equal(["1","2","3"],arr)
end
end #def
end #class
#####################################
1) Failure:
test_toy_test(TOY_CASE)
[bar.rb:12:in `test_toy_test'
bar.rb:8:in `each'
bar.rb:8:in `test_toy_test']:
<["1", "2", "3"]> expected but was
<[1, 2, 3]>.
1 tests, 1 assertions, 1 failures, 0 errors
>Exit code: 1
I had to go to the comp.lang.ruby list for an answer. Even my local
Ruby guru didn't see the problem immediately.
Apparently inside an "each" loop you're only working on a copy of the
item, not the item itself, so to_s isn't actually working on the real
items in the array.
To make this work, you have to use "map":
aoa.each do |arr|
arr.map! do |item|
item = item.to_s
end
Jonathan Kohl mentions an opposite but similar weirdness:
a = %w[a b c]
b = a
b = %w[x y z]
p a
=>
x y z
p b
=>
x y z
when what was expected was this:
p a
=>
["a", "b", "c"]
_______________________________________________
Wtr-general mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/wtr-general