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