如何在不使用复制或克隆的情况下克隆Rust中的结构?

如何在不使用复制或克隆的情况下克隆Rust中的结构?,rust,Rust,如何创建这三种结构样式的深层副本 // A unit struct struct Thing; // A tuple struct struct Thingy(u8, i32); // regular struct Location { name: String, code: i32, } 我可以不使用复制或克隆特征来执行此操作吗?如果已经定义了一个结构,但没有实现这些特性,是否有解决方法 // without this: #[derive(Copy, Clone)] st

如何创建这三种结构样式的深层副本

// A unit struct
struct Thing;

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

// regular
struct Location {
    name: String,
    code: i32,
}
我可以不使用
复制
克隆
特征来执行此操作吗?如果已经定义了一个结构,但没有实现这些特性,是否有解决方法

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

单元结构不包含任何数据,因此“深度副本”只是它的另一个实例:
let thing\u clone=thing

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

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

let location_clone = Location::new(location.name.clone(), location.code);
请注意,我只为字符串字段显式编写了
.clone()
。这是因为u8和i32实现了
复制
,因此将在需要时自动复制。不需要显式复制/克隆


这就是说,使用
Clone
特征显然更为惯用。如果
Thing
Thingy
Location
是外部库的一部分,您可以提交一份错误报告,要求为这些结构实现
克隆。

“我可以不使用任何复制和克隆特征来实现吗?”不使用这些特征进行复制听起来不合理。您能否提供有关您的问题的其他上下文?您当前创建这些副本的尝试是什么?您不能复制
字符串
,使用克隆,因为它保证所有字段都是公共的,并实现克隆或复制,并且有一个公共构造函数?问题似乎是,为什么它们还没有
克隆
?你能在现有的库中归档一个bug吗?