Как я могу реализовать черту Rust Copy?
Я пытаюсь инициализировать массив структур в 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];
Когда я пытаюсь скомпилировать, компилятор жалуется, что черта Copy
не реализована:
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
Как реализовать черту Copy
?
Ответы
Ответ 1
Вам не нужно реализовывать Copy
самостоятельно; компилятор может получить его для вас:
#[derive(Copy, Clone)]
enum Direction {
North,
East,
South,
West,
}
#[derive(Copy, Clone)]
struct RoadPoint {
direction: Direction,
index: i32,
}
Обратите внимание, что каждый тип, который реализует Copy
, должен также реализовывать Clone
. Clone
также может быть получено.
Ответ 2
Просто представьте #[derive(Copy, Clone)]
перед перечислением.
Если вы действительно хотите, вы также можете
impl Copy for MyEnum {}
Атрибут getive делает то же самое под капотом.