【问题标题】:Clone array of objects Crystal克隆对象数组 Crystal
【发布时间】:2018-01-29 05:00:54
【问题描述】:

我需要在 Crystal 中创建一个对象数组的克隆。

cloned_person_array = persons.clone #[Person, Person, Person]

但我收到以下错误:

undefined method 'clone' for Person Array(T).new(size) { |i| @buffer[i].clone.as(T) }

我意识到此方法不适用于代码定义的非基元。 documentation 没有明确排除它,但它只显示了一个原始示例。

如何在 Crystal 中克隆对象数组?

我可以想象在数组上执行.map,然后以这种方式返回一个新数组,但我很好奇我是否只是错误地使用了上面提到的克隆方法?

【问题讨论】:

    标签: crystal-lang


    【解决方案1】:

    您需要自己定义Person#clone,以允许您克隆Array(Person)

    一个简单的方法是使用def_clone 宏。

    class Person
      property name : String
    
      def_clone
    end 
    

    【讨论】:

    • 啊,我曾尝试在该方法中创建一个克隆函数,但它失败了,因为我不明白它需要属性信息。所以我假设对于需要克隆的每个属性,您都需要另一个参数?就像如果你有财产地址,你需要 def_clone 名称,地址?
    • 没错。 def_clone 的参数是必须克隆的实例变量列表。如果没有 args,您只会得到对象的副本(与 dup 相同)
    • 看起来您不再需要包含变量列表了。如果您尝试这样做,它将引发错误。只需在你的类中包含你的宏 def_clone 就足够了
    猜你喜欢
    • 2021-01-07
    • 2018-05-26
    • 2011-11-07
    • 1970-01-01
    • 2017-02-22
    • 2018-09-28
    • 2021-12-28
    • 2016-04-08
    • 2019-02-12
    相关资源
    最近更新 更多