面试题答案
一键面试基本步骤
- 确保结构体的所有成员类型都实现了
Clone
trait。因为Clone
是可派生(derivable)的,如果结构体的所有成员都实现了Clone
,可以直接使用#[derive(Clone)]
来自动实现Clone
。如果不能自动派生,就需要手动实现。 - 为自定义结构体实现
Clone
trait,在实现中为结构体的每个成员调用clone
方法来创建其副本。
注意事项
- 对于实现
Clone
的类型,其clone
方法应该返回一个值的完全独立副本,这意味着修改副本不应该影响原始值,反之亦然。 - 确保递归数据结构在
Clone
实现中正确处理,防止无限循环。
代码示例
struct MyStruct {
string_field: String,
int_field: i32,
}
impl Clone for MyStruct {
fn clone(&self) -> MyStruct {
MyStruct {
string_field: self.string_field.clone(),
int_field: self.int_field,
}
}
}
在上述代码中,String
类型实现了 Clone
,所以可以调用 clone
方法创建副本。i32
是实现了 Copy
trait 的类型,Copy
trait 意味着可以简单复制,不需要显式调用 clone
方法。