如何重载 Rust 中的赋值操作?

How can I overload the assignment operation in Rust?

std::ops中有很多操作,但是简单的赋值没有。

我来自 C++ 背景,其中有复制构造函数和赋值运算符重载可以为您完成工作。我在 Rust 中需要类似的东西。

不能重载赋值。将变量从一个位置移动到另一个位置是 Rust 所有权语义的核心组成部分,并且不可覆盖。

另一个答案建议您自定义实现 Copy 特征。这没有意义,因为 there's nothing to implement:

pub trait Copy: Clone { }

您可以为类型实现 Clone,但要使用 clone,您必须显式调用它:

let foo = bar.clone();

实际赋值仍然只是将位从右手边复制到左手边,唯一的区别是你不放弃[的所有权=15=].


如果您的类型可以通过简单地复制位来复制,那么实现Copy是合适的。 如果可以通过执行某种函数来复制,那么实现Clone是合适的。我不知道在任何给定的类型赋值时隐式执行代码(我认为这是一件好事)。