From: Lionel Thiry Date: 2005-12-01T20:37:31+09:00 Subject: Re: Point an element in Hash Object Ross Bamford a 辿crit : > On Wed, 30 Nov 2005 22:05:53 -0000, Andrew > wrote: > >> I'm trying to create an hash object using object string for key and >> value. >> I need to link a key with another key as value... so an element of hash >> object can point to another element. But i need the link to the key and >> not a copy of the value. >> >> I have tried in this way: >> @my_hash["one"] = "First" >> @my_hash["two"] = "Second" >> @my_hash["three"] = "Third" >> @my_hash["four"] = @my_hash["T1"] >> >> Now if I modify >> @my_hash["one"] = "Modify" >> I would like to see the new value also for >> @my_hash["four"] => "Modify" >> but I see "First" because i think it do a copy. >> >> The problem is that i woult like to refer the element end not to copy >> it. >> Thanks so much and sorry for my english. >> >> Andreaw >> > > (Caveat: Fairly new to Ruby) > > You actually do have a reference - AFAIU so far, pretty much everything > is passed by reference (except references, which are passed by value > ;)). Prior to your '@my_hash["one"] = "Modify"' they do both reference > the same object, but then you replace the reference with a new > reference, to a string "Modify". > > Swap > > @my_hash["one"] = "Modify" > > for > > @my_hash["one"].sub!(/First/,'Modify') @my_hash["one"].replace 'Modify' is better > > and you should get the result you want, because 'sub!' modifies the > receiver, so no new reference is assigned to @my_hash["one"]. > > (N.B. that this just illustrates the problem more, it's not a general > solution. For that I'd probably use a holder for the string (maybe an > one-element array), but I don't fully know what Ruby has to offer > instead yet ;) > -- Lionel Thiry Personal web site: http://users.skynet.be/lthiry/