【问题标题】:What's the difference between #clone and #dup#clone 和 #dup 有什么区别
【发布时间】:2016-12-25 14:14:00
【问题描述】:

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

两者之间究竟有什么区别? api 说#dup 浅拷贝数组,而#clone 深拷贝表示数组。我不确定这到底意味着什么以及我应该使用哪一个。

【问题讨论】:

    标签: arrays crystal-lang


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-28
      • 2015-07-17
      • 2011-11-10
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 2014-04-11
      • 2011-04-06
      • 1970-01-01
      相关资源
      最近更新 更多