Bài học theo mô-đun (1/2)
Xác định và khởi tạo cấu trúc
Cấu trúc (hoặc cấu trúc) trong Rust là các kiểu dữ liệu tùy chỉnh cho phép bạn nhóm nhiều giá trị liên quan lại với nhau. Chúng tương tự như các đối tượng hoặc lớp trong các ngôn ngữ khác nhưng không có tính kế thừa.
Xác định một cấu trúc
Để xác định cấu trúc, chúng tôi sử dụng từ khóa struct theo sau là tên trong PascalCase. Bên trong, chúng tôi xác định tên và loại trường:
struct User {
username: String,
email: String,
active: bool,
sign_in_count: u64,
}Tạo một phiên bản
Để sử dụng cấu trúc, chúng ta phải tạo một thể hiện bằng cách điền vào tất cả các trường được chỉ định:
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
// Access fields using dot notation
println!("Is user {} active? {}", user1.username, user1.active);
}Khả năng thay đổi cấu trúc
Trong Rust, toàn bộ phiên bản phải được đánh dấu là có thể thay đổi (mut) nếu bạn muốn sửa đổi bất kỳ trường nào của phiên bản đó. Rust không cho phép chỉ đánh dấu một số trường nhất định là có thể thay đổi:
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
user1.active = false; // Valid because user1 is mutable!
}Cấu trúc bộ và cấu trúc giống đơn vị
Rust cũng hỗ trợ hai định dạng cấu trúc khác bên cạnh các cấu trúc trường được đặt tên cổ điển:
- Cấu trúc bộ dữ liệu: Chúng có tên liên quan nhưng các trường không có tên riêng lẻ, chỉ có loại. Chúng rất hữu ích cho việc xác định và phân biệt các loại cụ thể:
Rust
struct Point(i32, i32, i32); let origin = Point(0, 0, 0); - Cấu trúc giống đơn vị: Chúng không xác định bất kỳ trường nào. Chúng hoạt động giống như loại đơn vị
(). Chúng rất hữu ích khi bạn cần triển khai các hành vi (đặc điểm) trên một loại mà không lưu trữ bất kỳ dữ liệu nào trong đó.
Hãy tự mình thử
Xác định cấu trúc Người dùng ở trên chính với các trường: tên người dùng (Loại chuỗi) và hoạt động (loại bool).
Hiển thị gợi ý
Viết `struct User { username: String, active: bool }`Before`main`.
Giải pháp khả dụng sau 3 lần thử
Sửa đổi user1 để làm cho nó có thể thay đổi (hãy thay đổi user1) và thay đổi trường hoạt động thành sai trước khi in.
Hiển thị gợi ý
Thêm `mut`to`let user1`để tạo thành`let mut user1`, sau đó chèn `user1.active = false;`.
Giải pháp khả dụng sau 3 lần thử
Xác định cấu trúc bộ dữ liệu có tên Màu chứa ba trường i32. Trong main, khởi tạo Màu với các giá trị 255, 0 và 100 gán nó cho biến my_color, sau đó in phần tử đầu tiên của nó (giá trị màu đỏ) bằng println!.
Hiển thị gợi ý
Xác định cấu trúc tuple với `struct Color(i32, i32, i32);`. Trong main, khởi tạo nó dưới dạng `let my_color = Color(255, 0, 100);`và in giá trị màu đỏ bằng`my_color.0`.
Giải pháp khả dụng sau 3 lần thử