Ôn tập: con trỏ thông minh mock
Thuộc phần Lập trình hướng đối tượng trong hành trình Rust của Coddy. Bài học 58 trên 61.
Thử thách
DễHãy tạo một con trỏ thông minh giả lập tên là SmartBox để minh họa cách các con trỏ thông minh thực sự của Rust hoạt động bên trong! Trình bao bọc của bạn sẽ dùng kiểu tổng quát, cho phép truy cập giá trị bên trong và tự động thông báo khi được dọn dẹp.
Bạn sẽ sắp xếp code trong hai tệp:
smart_box.rs: Định nghĩa một cấu trúc tổng quát công khaiSmartBox<T>với một trường duy nhất tên làvaluecó kiểuT. Triển khai hàm liên kếtnewđể tạo một SmartBox và in thông báo tạo. Thêm phương thứcgettrả về tham chiếu đến giá trị bên trong. Cuối cùng, triển khai traitDropđể in thông báo dọn dẹp khi SmartBox ra khỏi phạm vi.main.rs: Đưa module smart_box vào và minh họa SmartBox với hai kiểu khác nhau. Tạo mộtSmartBox<i32>chứa một số và mộtSmartBox<String>chứa văn bản, cả hai đều lấy từ đầu vào đã cho. In các giá trị bằng phương thứcget. Thông báo Drop sẽ tự động xuất hiện khi các hộp ra khỏi phạm vi ở cuối main.
Khi tạo SmartBox, chương trình sẽ in:
SmartBox createdKhi truy cập giá trị, hãy in theo định dạng sau:
Value: {value}Khi SmartBox bị hủy, chương trình sẽ in:
SmartBox droppedVí dụ, với đầu vào 42 và Hello:
SmartBox created
SmartBox created
Value: 42
Value: Hello
SmartBox dropped
SmartBox droppedLưu ý rằng cả hai hộp được tạo trước, sau đó các giá trị được truy cập, và cuối cùng cả hai bị hủy theo thứ tự ngược lại (tạo sau, hủy trước) khi main kết thúc.
Bạn sẽ nhận được hai đầu vào: một giá trị số nguyên (phân tích thành i32) và một giá trị chuỗi.
Tự làm thử
mod smart_box;
use smart_box::SmartBox;
fn main() {
// Đọc dữ liệu đầu vào
let mut input1 = String::new();
std::io::stdin().read_line(&mut input1).expect("Failed to read line");
let number: i32 = input1.trim().parse().expect("Failed to parse number");
let mut input2 = String::new();
std::io::stdin().read_line(&mut input2).expect("Failed to read line");
let text = input2.trim().to_string();
// TODO: Tạo một SmartBox<i32> chứa số đã nhập
// TODO: Tạo một SmartBox<String> chứa văn bản đã nhập
// TODO: In các giá trị bằng phương thức (method) get
// Định dạng: "Value: {value}"
// Các thông báo Drop sẽ tự động xuất hiện khi main kết thúc
}
Tất cả bài học trong Lập trình hướng đối tượng
1Phương thức và hành vi
Nhập môn khối triển khaiTham số selfPhương thức có thể thay đổiHàm liên kếtNhiều khối triển khaiNối chuỗi phương thứcÔn tập: thao tác với hình chữ nhật4Dự án: Thú cưng ảo
Định nghĩa thú cưngCho thú cưng ăn7Các trait tiêu chuẩn
Trait DebugTrait DisplayClone và CopyCác trait so sánh bằngÔn tập: Điểm có thể in ra2Tính đóng gói và module
Kiến thức cơ bản về moduleTừ khóa publicTrường riêng tưHàm lấy giá trịHàm thiết lập giá trịÔn tập: tủ khóa an toàn5Kiểu tổng quát
Cấu trúc tổng quátPhương thức tổng quátNhiều kiểu tổng quátHàm tổng quátÔn tập: điểm tọa độTự luyện tập: Trình biên dịch Rust online