update(other_hash)和merge(other_hash)之间的区别

时间:2013-01-13 19:03:33

标签: ruby

更新代码:

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}

合并代码:

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>

我在同一merge上运行了上述updatehash方法。但得到了相同的输出。所以我的问题是:updatemerge是否使用相同的逻辑?如果不相同那么那些输出是否相同?

4 个答案:

答案 0 :(得分:23)

  

updatemerge是否使用相同的逻辑?

不,他们不一样。 update is an alias for merge!,这是merge的原位变体。

  

如果不相同那么那些输出是否相同?

因为在这两种情况下,您都使用了呼叫的返回值,但h1的值在每种情况下都不同:

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 }

答案 1 :(得分:3)

答案 2 :(得分:2)

Hash #redate是Hash#merge的别名!

Hash#merge和Hash#update之间的区别在于Hash #upcate updates /值就地,而Hash #incina 返回更新哈希而不触及调用实例

答案 3 :(得分:1)

h1.update(h2)-更新h1实例-返回更新的h1; h1.merge(h2)-离开h1并创建更新的副本-返回h1的更新副本(我可以称之为h3)