克隆对象数组 Crystal

Clone array of objects Crystal

我需要在 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 然后以这种方式返回一个新数组,但我很好奇是否我只是错误地使用了上面提到的克隆方法?

您需要自己定义 Person#clone,才能克隆 Array(Person)

一个简单的方法是 def_clone 宏。

class Person
  property name : String

  def_clone
end