导出Enum的特征副本时,"特征克隆未实现"

Tia*_*gel 11 enums copy rust

以下代码:

#[derive(Copy)]
enum MyEnum {
    Test
}
Run Code Online (Sandbox Code Playgroud)

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

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

She*_*ter 16

Copy特点是一个subtraitClone,所以你总是需要实现Clone,如果你实现Copy:

#[derive(Copy, Clone)]
enum MyEnum {
    Test
}
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为这两个CopyClone是复制现有的对象的方式,但不同的语义.Copy只需复制构成对象的位即可复制对象(如memcpyC中所示).Clone可能更昂贵,可能涉及分配内存或复制系统资源.任何可以复制的东西Copy也可以复制Clone.


dio*_*ovk 5

这是因为特性Copy取决于特征Clone.编译器不会尝试为您推断和实现该特征.所以你必须明确地实现克隆特征.

像那样:

#[derive(Copy,Clone)]
enum MyEnum {
  Test
}
Run Code Online (Sandbox Code Playgroud)