克隆对象数组Crystal

use*_*142 2 crystal-lang

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

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

但是我收到以下错误:

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

我意识到这个方法不适用于由代码定义的非基元.该文件没有明确排除它,但它只能说明一个基本的例子.

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

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

RX1*_*X14 5

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

一个简单的方法是def_clone宏.

class Person
  property name : String

  def_clone
end 
Run Code Online (Sandbox Code Playgroud)