2016-12-25 73 views
2

所以我一直在學習沒有紅寶石背景的水晶,並注意到api文檔有#dup#clone基本上覆制一個數組。#clone和#dup之間的區別是什麼

這兩者之間的區別究竟是什麼? API說#dup淺拷貝陣列,而#clone深拷貝所述陣列。我不確定究竟是什麼,以及我應該使用哪一個。

回答

4

#dup將在內存中複製數組,即它包含的項目列表,但它不會複製項目本身。突變新陣列不會影響前一個陣列(例如push,pop),但是由於項目是相同的對象,所以突變它的任何項目都將影響前一個陣列的項目。

#clone將通過遞歸調用#clone來複制內存中的數組列表以及其項目。這是原始數組的完整克隆。任何東西的變異,即使是深層嵌套的對象,都不會影響原始內容。

請注意,這適用於任何對象,而不僅僅是數組,並且可以通過覆蓋自己對象中的方法來自定義行爲。

這就是說,它只適用於對象數組(例如類實例)。對於基元數組(整型,浮點型,結構...),這些項將與#dup一起被複制到數組列表中。

相關問題