更新代码:
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}
Run Code Online (Sandbox Code Playgroud)
合并代码:
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>
Run Code Online (Sandbox Code Playgroud)
我运行上面merge和update方法相同hash.但得到了相同的输出.所以我的问题是:是update和并merge使用相同的逻辑吗?如果不相同那么输出如何相同?
And*_*all 23
是
update和merge相同的逻辑工作?
不,他们不一样.update是别名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 }
Run Code Online (Sandbox Code Playgroud)