【问题标题】:How can I overload the assignment operation in Rust?如何在 Rust 中重载赋值操作?
【发布时间】:2016-09-19 12:33:03
【问题描述】:

std::ops中有很多操作,但没有什么可以简单赋值。

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

【问题讨论】:

    标签: rust assignment-operator


    【解决方案1】:

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

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

    pub trait Copy: Clone { }
    

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

    let foo = bar.clone();
    

    实际赋值仍然只是将位从右侧复制到左侧,唯一的区别是您没有放弃bar的所有权。


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

    【讨论】:

    • 我意识到,我对 Rust 赋值的理解是错误的,正如我在我的问题中所说的,我是用 C++ 回来的。 (大多数时候会让人感到困惑。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2013-12-02
    • 2011-07-07
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多