From: takanobu maekawa Date: 2012-09-20T12:20:59+09:00 Subject: behavior of iterator methods Hi all, I am a Ruby-beginner. I have some experience of C/C++ for several years. It has been only one week since I started to learn Ruby. Please tell me about the behavior of iterator methods. At first, I did as bellow on the irb environment. ------------------------------------------------------- irb(main):001:0> s = ["a", "b", "c"] => ["a", "b", "c"] irb(main):002:0> s[0].object_id => 36971304 irb(main):003:0> s[1].object_id => 36971292 irb(main):004:0> s[2].object_id => 36971280 irb(main):005:0> s.each{|c| c.upcase!} => ["A", "B", "C"] irb(main):006:0> p s ["A", "B", "C"] => nil ------------------------------------------------------- Looking at this, I thought I can change the value of each element in Array object through iterator methods. However, when I did next as bellow, that behavior looked different. ------------------------------------------------------- irb(main):007:0> a = [1,2,3] => [1, 2, 3] irb(main):008:0> a[0].object_id => 3 irb(main):009:0> a[1].object_id => 5 irb(main):010:0> a[2].object_id => 7 irb(main):011:0> a.each{|i| i += 1} => [1, 2, 3] irb(main):012:0> p a [1, 2, 3] => nil irb(main):013:0> a.each{|i| p i.object_id} 3 5 7 => [1, 2, 3] ------------------------------------------------------- I expected that Array#each method with the code block would change contents of the Array object variable named 'a' into [2,3,4]. But it didn't. Why? The object IDs of a[0], a[1], a[2] are shown through the the code block of Array#each. So I thought if variable named 'i' changed its value, that had to be reflected to the Array object 'a'. But it didn't. Why did this difference happened? -- Posted via http://www.ruby-forum.com/.