Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between update(other_hash) and merge(other_hash)

Tags:

ruby

Update Code:

irb(main):001:0> h1 = { "a" => 100, "b" => 200 }
=> {"a"=>100, "b"=>200}
irb(main):002:0> h2 = { "b" => 254, "c" => 300 }
=> {"b"=>254, "c"=>300}
irb(main):003:0> h1.update(h2)
=> {"a"=>100, "b"=>254, "c"=>300}

Merge Code:

irb(main):001:0> h1 = { "a" => 100, "b" => 200 }
=> {"a"=>100, "b"=>200}
irb(main):002:0> h2 = { "b" => 254, "c" => 300 }
=> {"b"=>254, "c"=>300}
irb(main):003:0> h1.merge(h2)
=> {"a"=>100, "b"=>254, "c"=>300}
irb(main):004:0>

I ran the above merge and update method on the same hash. But got the same output. So here my question is: are update and merge works with same logic? if not same then how the output came same for those?

like image 995
Arup Rakshit Avatar asked Jan 13 '13 19:01

Arup Rakshit


2 Answers

Are update and merge works with same logic?

No, they are not the same. update is an alias for merge!, which is the in-place variant of merge.

if not same then how the output came same for those?

Because in both cases you are using the return value of the call, however, the value of h1 is different in each case:

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.update(h2)
h1  #=> { "a" => 100, "b" => 254, "c" => 300 }

h1 = { "a" => 100, "b" => 200 }
h2 = { "b" => 254, "c" => 300 }
h1.merge(h2)
h1  #=> { "a" => 100, "b" => 200 }
like image 78
Andrew Marshall Avatar answered Sep 27 '22 22:09

Andrew Marshall


Hash#update is an alias for Hash#merge! http://ruby-doc.org/core-1.9.3/Hash.html#method-i-update

like image 35
amenzhinsky Avatar answered Sep 27 '22 20:09

amenzhinsky