3
use std::collections::HashMap;
// #[derive(Copy, Clone)]
enum SomeEnum {
Some1,
Some2,
}
struct SomeStruct {
pub some_enum: SomeEnum,
pub s: String,
}
fn proc_struct(some_struct: &SomeStruct) {
let mut map = HashMap::new();
map.insert(String::from("any"), 0);
match map.get(&some_struct.s) { // just to make a reference in SomeStruct
Some(v) => {
proc1(some_struct.some_enum);
proc2(&some_struct.some_enum);
}
None => {}
}
}
fn proc1(some: SomeEnum) {}
fn proc2(some: &SomeEnum) {}
fn main() {
let some_struct = SomeStruct { some_enum: SomeEnum::Some1, s: String::from("s") };
proc_struct(&some_struct);
}
以上代码生成以下错误:应该简单的枚举派生复制?性能有什么不同?
error[E0507]: cannot move out of borrowed content
--> src/main.rs:20:19
|
20 | proc1(some_struct.some_enum);
| ^^^^^^^^^^^ cannot move out of borrowed content
当我添加#[derive(Copy, Clone)]
到SomeEnum
,它编译罚款。
像SomeEnum
这样的简单枚举派生出Copy
特质吗? 功能proc1()
和proc2()
之间的性能有任何区别吗?
作为参考,这是[交叉发布到Rust用户论坛](https://users.rust-lang.org/t/should-simple-enum-derive-copy-trait/11483?u=shepmaster )。 – Shepmaster