如何在Rust中克隆结构而不使用复制或克隆?

时间:2019-01-22 22:20:57

标签: rust

如何为这三种样式的每种样式创建深拷贝?

// A unit struct
struct Thing;

// A tuple struct
struct Thingy(u8, i32);

// regular
struct Location {
    name: String,
    code: i32,
}

我可以不使用CopyClone特征吗?如果已经定义了一个结构并且未实现这些特征,是否有解决方法?

// without this:
#[derive(Copy, Clone)]
struct Location {
    name: String,
    code: i32,
}

1 个答案:

答案 0 :(得分:0)

一个单元结构不包含任何数据,因此“深拷贝”将只是它的另一个实例:let thing_clone = Thing;

对于其他类型,您只需手动克隆字段并从克隆的字段中创建一个新对象。假设newThingy都有一个Location方法:

let thingy_clone = Thingy::new(thingy.0, thingy.1);

let location_clone = Location::new(location.name.clone(), location.code);

请注意,我只为String字段显式编写了.clone()。这是因为u8和i32实现了Copy,因此将在需要时自动复制。无需明确的复制/克隆。

也就是说,使用Clone特性绝对是更习惯的做法。如果ThingThingyLocation是外部库的一部分,则可以提交错误报告,要求为这些结构实现Clone