Crystal lang 克隆晶体对象阵列

Crystal lang 克隆晶体对象阵列,crystal-lang,Crystal Lang,我需要在Crystal中创建一个对象数组的克隆 cloned_person_array=persons.clone#[person,person,person] 但我得到了以下错误: Person的未定义方法“克隆” 数组(T).new(size){i}@buffer[i].clone.as(T)} 我意识到这个方法并不适用于代码定义的非原语。没有显式排除它,但它只显示了一个基本示例 如何在Crystal中克隆对象数组? 我可以想象在数组上执行一个.map,然后以这种方式返回一个新数组,但我很

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

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

但我得到了以下错误:

Person的未定义方法“克隆”
数组(T).new(size){i}@buffer[i].clone.as(T)}

我意识到这个方法并不适用于代码定义的非原语。没有显式排除它,但它只显示了一个基本示例

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


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

你需要自己定义
个人#克隆
才能克隆
数组(个人)

一种简单的方法是使用宏


啊,我曾尝试在方法中创建克隆函数,但失败了,因为我不理解它需要属性信息。所以我假设每个需要克隆的属性都需要另一个参数?比如,如果你有财产地址,你需要定义克隆名称,地址?没错。def_clone的参数是必须克隆的实例变量列表。如果没有参数,您只需获得对象的副本(与dup相同),看起来您不再需要包含变量列表。如果你尝试这样做,它将抛出一个错误。在你的课堂上加入宏定义克隆就足够了
class Person
  property name : String

  def_clone
end