#clone和#dup之间有什么区别

时间:2016-12-25 14:14:01

标签: arrays crystal-lang

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

这两者究竟有什么区别? api说#dup浅层复制数组,而#clone深层复制数组。我不确定究竟是什么,我应该使用哪一个。

1 个答案:

答案 0 :(得分:4)

#dup将复制内存中的数组,即它包含的项目列表,但不会复制项目本身。变换新数组不会影响前一个数组(例如pushpop),但是改变其任何项都会影响前一个数组的项,因为这些项是相同的对象。

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

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

话虽如此,它只适用于对象数组(例如类实例)。对于基元数组(整数,浮点数,结构...),项目将与数组列表一起复制#dup