【发布时间】:2015-01-10 13:12:18
【问题描述】:
当我定义这样的结构时,我可以通过值将其传递给函数,而无需添加任何特定内容:
#[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(),
}
}
}
为什么我需要指定一个空的
Copytrait 实现?有没有更简单的方法可以做到这一点,还是我必须重新考虑一些事情?
为什么通过值将
MyType的实例传递给函数时会起作用?我的猜测是它正在被移动,所以一开始就没有副本。
【问题讨论】: