Khi tôi xác định một cấu trúc như thế này, tôi có thể vượt qua nó để một hàm theo giá trị mà không cần thêm bất cứ điều gì cụ thể:Tại sao đặc điểm Sao chép cần thiết cho khởi tạo mảng mặc định (có giá trị cấu trúc)?
#[derive(Debug)]
struct MyType {
member: u16,
}
fn my_function(param: MyType) {
println!("param.member: {}", param.member);
}
Khi tôi muốn tạo một mảng của MyType
trường với một giá trị mặc định
fn main() {
let array = [MyType { member: 1234 }; 100];
println!("array[42].member: ", array[42].member);
}
Trình biên dịch Rust nói với tôi:
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
Khi tôi thực hiện Copy
và Clone
, mọi thứ hoạt động:
impl Copy for MyType {}
impl Clone for MyType {
fn clone(&self) -> Self {
MyType {
member: self.member.clone(),
}
}
}
Tại sao tôi cần phải xác định một sản phẩm nào
Copy
thực hiện đặc điểm?Có cách nào đơn giản hơn để thực hiện việc này hoặc tôi có phải nghĩ lại điều gì đó không?
Tại sao nó hoạt động khi chuyển một phiên bản
MyType
đến hàm theo giá trị? Tôi đoán là nó đang được di chuyển, vì vậy không có bản sao ở nơi đầu tiên.