From: William Djaja Tjokroaminata Date: 2002-10-01T01:02:32+09:00 Subject: Re: Where Is Method Call Precedence? Hi Bulat, When I first read your code below, it was also obvious to me, since the original reference to the array [s] in the second line was lost forever. In the last line, ["mutable"] is really a newly created object, which is obviously different from the original array object. But then, toying with your idea, I found this: # ruby 1.6.7 (2002-03-01) [i686-linux] s = "mutable" arr = [s] hash = { arr => "object" } s.upcase! p hash[arr] #=> nil This is really surprising to me! Is this the expected behavior in Ruby? Because in Python, using an array as a hash key is forbidden in the first place (syntax error, I guess), while Ruby simply allows us to do so. Any idea, anyone? (I really thought before that the hash key were actually just the object ID in Ruby.) Regards, Bill ============================================================================ Bulat Ziganshin wrote: > eklmn! add one level of indirection: > s = "mutable" > hash = { [s] => "object" } > s.upcase! > p hash[["mutable"]] #=> nil > it's a well-known theoretical problem. call/asign by reference or by > value, and mutable objects versus non-modified