-1
这里是我无法理解的代码的简化版本:是否有可能使一个常数不可改变?
1.9.3p448 :004 > a = {a: 1, b: 2}
=> {:a=>1, :b=>2}
1.9.3p448 :005 > b = a
=> {:a=>1, :b=>2}
1.9.3p448 :006 > b[:c] = 3
=> 3
1.9.3p448 :007 > a
=> {:a=>1, :b=>2, :c=>3}
1.9.3p448 :008 >
我不明白为什么a
变化。 只想改变b
,并保持与a
其原始值。
是的,你说得对。 'dup'解决了它。然而,这个问题对我来说似乎仍然很奇怪 –
请注意,'freeze'也很浅,因此可以防止mod到主对象,但不会引用包含的对象。 'H = {A 1,B:2,C:[1,2]}。冻结; h2 = h' h2 [:a] = 11'或'h2 [:d] = 4'会引发RuntimeError,但h2 [:c] << 4'会修改引用的数组:=>'{ :a => 1,:b => 2,:c => [1,2,4]} – dbenhur