From: Gary Wright Date: 2011-01-18T12:34:48+09:00 Subject: Re: Calling by Reference - Two Questions On Jan 17, 2011, at 10:05 PM, Mike Stephens wrote: > Well, that is bizarre. > > In 1.8.6 I get: > > def myswap(arr) > [arr[1], arr[0]] > end > > def myswap!(arr) > arr[0], arr[1] = arr[1], arr[0] > end > > def myswap2!(arr) > arr[0], arr[1] = arr[1], arr[0] > arr > end > > a = [2, 5] > puts " start #{a} #{a.object_id} " #start 25 27431650 > > myswap a # => [5,2] (new object) > puts " myswap #{a} #{a.object_id} " myswap 25 27431650 > > myswap! a # => [5,2] (a now is changed; note that the returned array > isnot a) > puts " myswap! #{a} #{a.object_id} " myswap! 52 27431650 > > myswap2! a > puts " myswap2! #{a} #{a.object_id} " myswap2! 25 27431650 > > > I have no idea why myswap! works and myswap2! doesn't. They both work. Remember that myswap!(a) changed the array to [5,2] and so myswap2! changes it back to [2,5]. Gary Wright