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