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
Point an element in Hash Object
on 30.11.2005 23:05
Re: Point an element in Hash Object
on 01.12.2005 12:40
Ross Bamford a écrit : >> @my_hash["one"] = "First" >> The problem is that i woult like to refer the element end not to copy > ;)). 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/
Re: Point an element in Hash Object
on 01.12.2005 14:18
On Thu, 01 Dec 2005 11:33:36 -0000, Lionel Thiry <lthiryidontwantspams@skynetnospam.be> wrote: >> @my_hash["one"].sub!(/First/,'Modify') > > @my_hash["one"].replace 'Modify' > is better > Definitely. Thanks. :) (P.s. is 'replace' one of the '!' convention exceptions, or is there another reason it doesn't have a '!' ?)
Re: Point an element in Hash Object
on 01.12.2005 14:22
Hi -- On Thu, 1 Dec 2005, Ross Bamford wrote: > > (P.s. is 'replace' one of the '!' convention exceptions, or is there another > reason it doesn't have a '!' ?) It's not an exception: the convention is that when there's a pair of methods that differ only in that one is more "dangerous" than the other, they have the same name but the dangerous one has a ! on the end. replace isn't part of a pair of that kind -- it's just its own thing. David
Re: Point an element in Hash Object
on 01.12.2005 14:35
On Thu, 01 Dec 2005 13:21:27 -0000, David A. Black <dblack@wobblini.net>
wrote:
>
Ahh, I see... I had the idea that the bang signified a method that
modified self, regardless. A few other 'exceptions' make sense to me
now,
too :)
Thanks David.Re: Point an element in Hash Object
on 30.11.2005 23:44
On Wed, 30 Nov 2005 22:05:53 -0000, Andrew <andrea.reginato@gmail.com> wrote: > @my_hash["four"] = @my_hash["T1"] > > 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 ;)
