如何重载 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
是合适的。我不知道在任何给定的类型赋值时隐式执行代码(我认为这是一件好事)。
std::ops
中有很多操作,但是简单的赋值没有。
我来自 C++ 背景,其中有复制构造函数和赋值运算符重载可以为您完成工作。我在 Rust 中需要类似的东西。
您不能重载赋值。将变量从一个位置移动到另一个位置是 Rust 所有权语义的核心组成部分,并且不可覆盖。
另一个答案建议您自定义实现 Copy
特征。这没有意义,因为 there's nothing to implement:
pub trait Copy: Clone { }
您可以为类型实现 Clone
,但要使用 clone
,您必须显式调用它:
let foo = bar.clone();
实际赋值仍然只是将位从右手边复制到左手边,唯一的区别是你不放弃[的所有权=15=].
如果您的类型可以通过简单地复制位来复制,那么实现Copy
是合适的。 如果可以通过执行某种函数来复制,那么实现Clone
是合适的。我不知道在任何给定的类型赋值时隐式执行代码(我认为这是一件好事)。