Struct dạng tuple
Thuộc phần Logic và luồng chương trình trong hành trình Rust của Coddy. Bài học 25 trên 66.
Trong khi các struct thông thường dùng các trường có tên, Rust còn có một kiểu khác gọi là struct tuple. Kiểu này giúp bạn tạo kiểu tùy chỉnh ngắn gọn hơn khi không cần đặt tên riêng cho từng trường.
Cấu trúc tuple kết hợp lợi ích của việc tạo kiểu mới với sự đơn giản của tuple. Bạn định nghĩa cấu trúc này bằng từ khóa struct, theo sau là tên kiểu và các kiểu của trường trong dấu ngoặc đơn:
struct Color(i32, i32, i32);Lệnh này tạo một kiểu Color chứa ba giá trị i32, biểu thị các giá trị màu RGB. Khác với struct thông thường, bạn không chỉ định tên trường. Bạn truy cập các giá trị theo vị trí, giống như với tuple.
Để tạo một đối tượng của cấu trúc tuple, bạn truyền các giá trị trong dấu ngoặc đơn:
let red = Color(255, 0, 0);Bạn có thể truy cập từng trường bằng ký hiệu dấu chấm cùng chỉ số trường: red.0 cho bạn giá trị đầu tiên, red.1 cho bạn giá trị thứ hai, và cứ tiếp tục như vậy.
Thử thách
DễBạn sẽ nhận ba đầu vào: giá trị đỏ (dưới dạng số nguyên), giá trị xanh lá (dưới dạng số nguyên) và giá trị xanh dương (dưới dạng số nguyên). Định nghĩa một cấu trúc tuple Color chứa ba giá trị i32 biểu thị các thành phần màu RGB. Tạo một đối tượng của cấu trúc tuple này bằng các giá trị đầu vào, sau đó truy cập và in từng thành phần màu bằng ký pháp chỉ số.
Yêu cầu:
- Định nghĩa cấu trúc tuple
Colorcó ba trườngi32 - Đọc đầu vào thứ nhất và chuyển thành
i32để lấy giá trị đỏ - Đọc đầu vào thứ hai và chuyển thành
i32để lấy giá trị xanh lá - Đọc đầu vào thứ ba và chuyển thành
i32để lấy giá trị xanh dương - Tạo một đối tượng của cấu trúc tuple
Colorvới các giá trị này - Truy cập từng trường bằng ký pháp dấu chấm với các chỉ số (0, 1, 2) và in thông tin màu theo chính xác định dạng bên dưới
Đầu vào:
- Dòng thứ nhất: Giá trị đỏ dưới dạng số nguyên (ví dụ:
255) - Dòng thứ hai: Giá trị xanh lá dưới dạng số nguyên (ví dụ:
128) - Dòng thứ ba: Giá trị xanh dương dưới dạng số nguyên (ví dụ:
0)
Đầu ra:
- Dòng thứ nhất:
Red: [red_value] - Dòng thứ hai:
Green: [green_value] - Dòng thứ ba:
Blue: [blue_value]
Tự làm thử
use std::io;
// TODO: Định nghĩa struct tuple Color tại đây
fn main() {
// Đọc giá trị màu đỏ
let mut red_input = String::new();
io::stdin().read_line(&mut red_input).expect("Failed to read line");
let red: i32 = red_input.trim().parse().expect("Invalid input");
// Đọc giá trị màu xanh lá
let mut green_input = String::new();
io::stdin().read_line(&mut green_input).expect("Failed to read line");
let green: i32 = green_input.trim().parse().expect("Invalid input");
// Đọc giá trị màu xanh dương
let mut blue_input = String::new();
io::stdin().read_line(&mut blue_input).expect("Failed to read line");
let blue: i32 = blue_input.trim().parse().expect("Invalid input");
// TODO: Tạo một instance của struct tuple Color bằng các giá trị đầu vào
// TODO: Truy cập và in ra từng thành phần màu bằng ký pháp chỉ số
// Định dạng: Red: [value], Green: [value], Blue: [value]
}Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng chương trình
1Luồng điều khiển nâng cao
Biểu thức 'match'Khớp nhiều giá trịKhớp các phạm viBiểu thức 'if let'Vòng lặp dưới dạng biểu thứcÔn tập: Trình phân tích cú pháp lệnh đơn giản4Nhóm dữ liệu bằng Struct
Struct là gì?Tổng quan về StructTruy cập các trường của StructStruct có thể thay đổiStruct làm tham số cho hàmStruct dạng tupleÔn tập: Tạo Struct Book2Giới thiệu về vector
Vector là gì?Tạo vectorThêm phần tử bằng pushTruy cập phần tử trong vectorLặp qua vectorLặp có thể thay đổiXóa phần tửÔn tập: Bộ theo dõi điểm số cơ bản5Cặp khóa-giá trị với bảng băm
Bảng băm là gì?Tạo bảng bămThêm cặp khóa-giá trịTruy cập giá trịDuyệt qua bảng bămCập nhật giá trịXóa một cặpÔn tập: Bộ đếm từ8Dự án: Quản lý kho hàng đơn giản
Thiết lập dự ánThêm mặt hàngKiểm tra hàng tồn khoBán mặt hàngKết hợp tất cả11Thử thách cuối cùng
Ôn tập: Các mục duy nhấtÔn tập: Trình xác thực hồ sơ người dùngÔn tập: Tổng hợp điểm3Danh sách việc cần làm trên dòng lệnh
Thiết lập dự ánThêm một việcXem tất cả việcXóa một việcCode hoàn chỉnh6Xử lý giá trị vắng mặt với 'Option'
'Option' là gì?Dùng 'match' với 'Option'is_some() và is_none()Lấy giá trị từ 'Option'expectCung cấp giá trị mặc định: unwrap_orÔn tập: tìm một phần tử9Lát cắt chuỗi và hơn thế nữa
String và &strTạo lát cắt chuỗiLát cắt làm tham số hàmCác lát cắt khácÔn tập: Tìm từ đầu tiênTự luyện tập: Trình biên dịch Rust online