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
···
--
Posted via http://www.ruby-forum.com/.
(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
···
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
--
Ross Bamford - rosco@roscopeco.remove.co.uk
Ross Bamford a écrit :
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
···
On Wed, 30 Nov 2005 22:05:53 -0000, Andrew <andrea.reginato@gmail.com> > wrote:
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/
Definitely. Thanks.
(P.s. is 'replace' one of the '!' convention exceptions, or is there another reason it doesn't have a '!' ?)
···
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
--
Ross Bamford - rosco@roscopeco.remove.co.uk
"\e[1;31mL"
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.
···
On Thu, 01 Dec 2005 13:21:27 -0000, David A. Black <dblack@wobblini.net> wrote:
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.
--
Ross Bamford - rosco@roscopeco.remove.co.uk
"\e[1;31mL"