#clone和#dup之间的区别是什么
问题描述:
所以我一直在学习没有红宝石背景的水晶,并注意到api文档有#dup
和#clone
基本上复制一个数组。#clone和#dup之间的区别是什么
这两者之间的区别究竟是什么? API说#dup
浅拷贝阵列,而#clone
深拷贝所述阵列。我不确定究竟是什么,以及我应该使用哪一个。
答
#dup
将在内存中复制数组,即它包含的项目列表,但它不会复制项目本身。突变新阵列不会影响前一个阵列(例如push
,pop
),但是由于项目是相同的对象,所以突变它的任何项目都将影响前一个阵列的项目。
#clone
将通过递归调用#clone
来复制内存中的数组列表以及其项目。这是原始数组的完整克隆。任何东西的变异,即使是深层嵌套的对象,都不会影响原始内容。
请注意,这适用于任何对象,而不仅仅是数组,并且可以通过覆盖自己对象中的方法来自定义行为。
这就是说,它只适用于对象数组(例如类实例)。对于基元数组(整型,浮点型,结构...),这些项将与#dup
一起被复制到数组列表中。