3 回答

TA貢獻(xiàn)1828條經(jīng)驗 獲得超3個贊
該clone方法是Ruby的標(biāo)準(zhǔn)淺層復(fù)制內(nèi)置方法:
irb(main):003:0> h0 = {"John" => "Adams", "Thomas" => "Jefferson"}
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):004:0> h1 = h0.clone
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
irb(main):005:0> h1["John"] = "Smith"
=> "Smith"
irb(main):006:0> h1
=> {"John"=>"Smith", "Thomas"=>"Jefferson"}
irb(main):007:0> h0
=> {"John"=>"Adams", "Thomas"=>"Jefferson"}
請注意,該行為可能會被覆蓋:
此方法可能具有特定于類的行為。如果是這樣,則將#initialize_copy在該類的方法下記錄該行為。

TA貢獻(xiàn)1790條經(jīng)驗 獲得超9個贊
正如其他人指出的那樣,clone會做到的。請注意,clone哈希會產(chǎn)生淺表副本。也就是說:
h1 = {:a => 'foo'}
h2 = h1.clone
h1[:a] << 'bar'
p h2 # => {:a=>"foobar"}
發(fā)生的事情是哈希的引用被復(fù)制,而不是引用所引用的對象。
如果要深拷貝,請執(zhí)行以下操作:
def deep_copy(o)
Marshal.load(Marshal.dump(o))
end
h1 = {:a => 'foo'}
h2 = deep_copy(h1)
h1[:a] << 'bar'
p h2 # => {:a=>"foo"}
deep_copy適用于任何可編組的對象。大多數(shù)內(nèi)置數(shù)據(jù)類型(數(shù)組,哈希,字符串等)都可以編組。
編組是Ruby的序列化名稱。通過編組,對象及其引用的對象將轉(zhuǎn)換為一系列字節(jié);這些字節(jié)然后用于創(chuàng)建另一個對象,例如原始對象。

TA貢獻(xiàn)1844條經(jīng)驗 獲得超8個贊
哈??梢詮默F(xiàn)有哈希創(chuàng)建新哈希:
irb(main):009:0> h1 = {1 => 2}
=> {1=>2}
irb(main):010:0> h2 = Hash[h1]
=> {1=>2}
irb(main):011:0> h1.object_id
=> 2150233660
irb(main):012:0> h2.object_id
=> 2150205060
- 3 回答
- 0 關(guān)注
- 923 瀏覽
添加回答
舉報