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

时间:2016-05-22 17:15:16

标签: rust assignment-operator

std::ops中有很多操作,但没有简单的任务。

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

2 个答案:

答案 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。 我的问题的答案是推导出CopyClone特征。我只需要添加

#[derive(Clone, Copy)]

在我的类型定义之上;这样我就能得到我想要的功能。

对于分配和复制的自定义逻辑,您可以自己轻松实现CopyClone,而不是使用派生。