std::ops
中有很多操作,但没有简单的任务。
我来自C ++背景,其中有复制构造函数和赋值运算符重载,可以为您完成工作。在Rust中我需要类似的东西。
答案 0 :(得分:3)
您无法超载分配。将变量从一个位置移动到另一个位置是Rust的所有权语义的核心组件,并且不可覆盖。
另一个答案表明您自定义实施Copy
特征。这没有意义,因为there's nothing to implement:
pub trait Copy: Clone { }
您可以为某个类型实施Clone
,但要使用clone
,您必须明确调用它:
let foo = bar.clone();
实际分配仍然只是从右侧到左侧复制位,唯一的区别是您不放弃bar
的所有权。
如果只需复制位即可复制您的类型,那么实现Copy
是合适的。 如果可以通过执行某种功能来复制它,那么实现Clone
是合适的。我不知道在任何给定的类型赋值中隐式执行代码(我将其视为好东西)。
答案 1 :(得分:0)
正如我所说,我很困惑:D。
我的问题的答案是推导出Copy
和Clone
特征。我只需要添加
#[derive(Clone, Copy)]
在我的类型定义之上;这样我就能得到我想要的功能。
对于分配和复制的自定义逻辑,您可以自己轻松实现Copy
和Clone
,而不是使用派生。