当我定义这样的 struct 时,我可以通过值将其传递给函数,而无需添加任何特定内容:
#[derive(Debug)]
struct MyType {
member: u16,
}
fn my_function(param: MyType) {
println!("param.member: {}", param.member);
}
当我想要创建一个包含MyType
个默认值实例的数组时
fn main() {
let array = [MyType { member: 1234 }; 100];
println!("array[42].member: ", array[42].member);
}
Rust编译器告诉我:
error[E0277]: the trait bound `MyType: std::marker::Copy` is not satisfied
--> src/main.rs:11:17
|
11 | let array = [MyType { member: 1234 }; 100];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `MyType`
|
= note: the `Copy` trait is required because the repeated element will be copied
当我实现Copy
和Clone
时,一切正常:
impl Copy for MyType {}
impl Clone for MyType {
fn clone(&self) -> Self {
MyType {
member: self.member.clone(),
}
}
}
为什么我需要指定一个空的
Copy
trait实现?有没有更简单的方法,或者我需要重新思考一下?
当通过值将
MyType
的实例传递给函数时,它为什么工作?我猜它正在被移动,所以一开始就没有拷贝.