#clone和#dup之间的区别是什么

问题描述:

所以我一直在学习没有红宝石背景的水晶,并注意到api文档有#dup#clone基本上复制一个数组。#clone和#dup之间的区别是什么

这两者之间的区别究竟是什么? API说#dup浅拷贝阵列,而#clone深拷贝所述阵列。我不确定究竟是什么,以及我应该使用哪一个。

#dup将在内存中复制数组,即它包含的项目列表,但它不会复制项目本身。突变新阵列不会影响前一个阵列(例如push,pop),但是由于项目是相同的对象,所以突变它的任何项目都将影响前一个阵列的项目。

#clone将通过递归调用#clone来复制内存中的数组列表以及其项目。这是原始数组的完整克隆。任何东西的变异,即使是深层嵌套的对象,都不会影响原始内容。

请注意,这适用于任何对象,而不仅仅是数组,并且可以通过覆盖自己对象中的方法来自定义行为。

这就是说,它只适用于对象数组(例如类实例)。对于基元数组(整型,浮点型,结构...),这些项将与#dup一起被复制到数组列表中。