On Tue, May 3, 2011 at 20:34, 7stud -- <bbxx789_05ss / yahoo.com> wrote:
> Peter Hicks wrote in post #996483:
>>
>> What is the magic I am missing?
>>
>
> clone():

`clone` doesn't cut it, since it's creating shallow copies. An
illustration of the problem:

==== begin snippet ====
arr = [{:fruit => {:kind => 'apple'}}, {:fruit => {:kind => 'banana'}}]
# => [{:fruit=>{:kind=>"apple"}}, {:fruit=>{:kind=>"banana"}}]

arr.map(&:clone).each { |h| h[:fruit][:kind] = 'coconut' }
# => [{:fruit=>{:kind=>"coconut"}}, {:fruit=>{:kind=>"coconut"}}]
==== end snippet ====

Notice that `arr` now has coconuts in it, instead of the original
apples and bananas.

~ jf
--
John Feminella
Principal Consultant, BitsBuilder
LI: http://www.linkedin.com/in/johnxf
SO: http://stackoverflow.com/users/75170/



On Tue, May 3, 2011 at 20:34, 7stud -- <bbxx789_05ss / yahoo.com> wrote:
> Peter Hicks wrote in post #996483:
>>
>> What is the magic I am missing?
>>
>
> clone():
>
> b = [ { :x => "foo" }, { :x => "bar" }, { :x => "baz" } ]
> count = 0
>
> b.each do |x|
> copy = x.clone
> copy[:x] = count
> count += 1
>
> puts copy[:x]
> end
>
> b.each do |x|
> p x
> end
>
> --output:--
> 0
> 1
> 2
> {:x=>"foo"}
> {:x=>"bar"}
> {:x=>"baz"}
>
> --
> Posted via http://www.ruby-forum.com/.
>
>