如何创建这三种结构样式的深层副本?
// A unit struct
struct Thing;
// A tuple struct
struct Thingy(u8, i32);
// regular
struct Location {
name: String,
code: i32,
}
我可以在不使用Copy
或Clone
特性的情况下执行此操作吗?如果一个结构体已经被定义了,但是还没有实现这些trait,有没有解决方法?
// without this:
#[derive(Copy, Clone)]
struct Location {
name: String,
code: i32,
}
1条答案
按热度按时间hyrbngr71#
一个单元结构体不包含任何数据,所以一个“深拷贝”只是它的另一个示例:
let thing_clone = Thing;
对于其他类型,您只需手动克隆字段并从克隆的字段创建一个新对象。假设
Thingy
和Location
都有new
方法:注意,我只为String字段显式地编写了
.clone()
。这是因为u8和i32实现了Copy
,因此在需要时会自动复制。无需显式复制/克隆。也就是说,使用
Clone
trait肯定更符合习惯。如果Thing
、Thingy
和Location
是外部库的一部分,您可以提交错误报告,要求为这些结构体实现Clone
。