On Wed, 30 Nov 2005 22:05:53 -0000, Andrew <andrea.reginato / gmail.com>  
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')

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 ;)

-- 
Ross Bamford - rosco / roscopeco.remove.co.uk