J'essaie d'initialiser un tableau de structures dans Rust:
enum Direction {
North,
East,
South,
West,
}
struct RoadPoint {
direction: Direction,
index: i32,
}
// Initialise the array, but failed.
let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];
Lorsque j'essaye de compiler, le compilateur se plaint que le trait Copy
n'est pas implémenté:
error[E0277]: the trait bound `main::RoadPoint: std::marker::Copy` is not satisfied
--> src/main.rs:15:16
|
15 | let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::marker::Copy` is not implemented for `main::RoadPoint`
|
= note: the `Copy` trait is required because the repeated element will be copied
Comment le trait Copy
peut-il être implémenté?
Vous n'avez pas à implémenter Copy
vous-même; le compilateur peut le dériver pour vous:
#[derive(Copy, Clone)]
enum Direction {
North,
East,
South,
West,
}
#[derive(Copy, Clone)]
struct RoadPoint {
direction: Direction,
index: i32,
}
Notez que chaque type qui implémente Copy
doit également implémenter Clone
. Clone
peut également être dérivé.
Ajoutez simplement #[derive(Copy, Clone)]
avant votre énumération.
Si vous voulez vraiment, vous pouvez aussi
impl Copy for MyEnum {}
L'attribut derive fait la même chose sous le capot.