更新代码:
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
上运行了上述update
和hash
方法。但得到了相同的输出。所以我的问题是:update
和merge
是否使用相同的逻辑?如果不相同那么那些输出是否相同?
答案 0 :(得分:23)
不,他们不一样。
update
和merge
是否使用相同的逻辑?
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)
Hash#update
是Hash#merge!
的别名
http://ruby-doc.org/core-1.9.3/Hash.html#method-i-update
答案 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)