【发布时间】:2015-08-27 06:27:51
【问题描述】:
以下代码:
#[derive(Copy)]
enum MyEnum {
Test
}
给我这个错误:
错误:特征core::clone::Clone 没有为MyEnum 类型实现[E0277]
为什么会这样,我该如何解决?
【问题讨论】:
以下代码:
#[derive(Copy)]
enum MyEnum {
Test
}
给我这个错误:
错误:特征core::clone::Clone 没有为MyEnum 类型实现[E0277]
为什么会这样,我该如何解决?
【问题讨论】:
Copy trait is a subtrait of Clone,所以如果你实现Copy,你总是需要实现Clone:
#[derive(Copy, Clone)]
enum MyEnum {
Test
}
这是有道理的,因为Copy 和Clone 都是复制现有对象的方法,但语义不同。 Copy 可以通过复制组成对象的位来复制对象(如 C 中的 memcpy)。 Clone 可能更昂贵,并且可能涉及分配内存或复制系统资源。任何可以用Copy 复制的东西也可以用Clone 复制。
【讨论】:
derive 实现中自动派生先决条件特征的讨论;你知道它是否仍在计划中,或者是否存在导致它被拒绝的方法的问题?
这是因为 trait Copy 依赖于 trait Clone。
编译器不会尝试为您推断和实现特征。
所以你也必须显式地实现 Clone trait。
这样:
#[derive(Copy,Clone)]
enum MyEnum {
Test
}
【讨论】: