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