【问题标题】:The "trait Clone is is not implemented" when deriving the trait Copy for Enum为 Enum 派生 trait Copy 时的“trait Clone is not implemented”
【发布时间】:2015-08-27 06:27:51
【问题描述】:

以下代码:

#[derive(Copy)]
enum MyEnum {
    Test
}

给我这个错误: 错误:特征core::clone::Clone 没有为MyEnum 类型实现[E0277]

为什么会这样,我该如何解决?

【问题讨论】:

    标签: enums copy rust


    【解决方案1】:

    Copy trait is a subtrait of Clone,所以如果你实现Copy,你总是需要实现Clone

    #[derive(Copy, Clone)]
    enum MyEnum {
        Test
    }
    

    这是有道理的,因为CopyClone 都是复制现有对象的方法,但语义不同。 Copy 可以通过复制组成对象的位来复制对象(如 C 中的 memcpy)。 Clone 可能更昂贵,并且可能涉及分配内存或复制系统资源。任何可以用Copy 复制的东西也可以用Clone 复制。

    【讨论】:

    • 我记得在derive 实现中自动派生先决条件特征的讨论;你知道它是否仍在计划中,或者是否存在导致它被拒绝的方法的问题?
    【解决方案2】:

    这是因为 trait Copy 依赖于 trait Clone。 编译器不会尝试为您推断和实现特征。 所以你也必须显式地实现 Clone trait。

    这样:

    #[derive(Copy,Clone)]
    enum MyEnum {
      Test
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-13
      • 1970-01-01
      • 2018-11-03
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多