Por que a característica de cópia é necessária para a inicialização da matriz padrão (com valor de estrutura)?
Quando defino uma estrutura como esta, posso transmiti-la para uma função por valor sem adicionar nada específico:
#[derive(Debug)]
struct MyType {
member: u16,
}
fn my_function(param: MyType) {
println!("param.member: {}", param.member);
}
Quando eu quero criar uma matriz deMyType
instâncias com um valor padrão
fn main() {
let array = [MyType { member: 1234 }; 100];
println!("array[42].member: ", array[42].member);
}
O compilador Rust me diz:
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
Quando eu implementoCopy
eClone
, tudo funciona:
impl Copy for MyType {}
impl Clone for MyType {
fn clone(&self) -> Self {
MyType {
member: self.member.clone(),
}
}
}
Por que preciso especificar um espaço vazioCopy
implementação de características?
Existe uma maneira mais simples de fazer isso ou eu tenho que repensar alguma coisa?
Por que isso funciona ao passar uma instância deMyType
para a função por valor? Meu palpite é que ele está sendo movido, portanto, não há cópia em primeiro lugar.