我需要在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
然后以这种方式返回一个新数组,但我很好奇我是否只是错误地使用上面提到的克隆方法?
答案 0 :(得分:5)
您需要自己定义Person#clone
,以便克隆Array(Person)
。
执行此操作的简便方法是def_clone
宏。
class Person
property name : String
def_clone
end