Почему свойство Copy необходимо для инициализации массива по умолчанию (struct valueed)?
Когда я определяю такую структуру, я могу передать ее функции по значению, не добавляя ничего конкретного:
#[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
черта реализации?
Есть ли более простой способ сделать это, или я должен что-то переосмыслить?
Почему это работает при передаче экземпляраMyType
к функции по значению? Я предполагаю, что он перемещается, поэтому в первую очередь его нет.