克隆对象数组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没有明确地排除它,但它只显示一个原始的例子 .

How do you clone an array of objects in Crystal?

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

回答(1)

2 years ago

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

一个简单的方法是def_clone宏 .

class Person
  property name : String

  def_clone
end