Mượn trong vòng lặp
Thuộc phần Kiến thức nền tảng trong hành trình Rust của Coddy. Bài học 67 trên 75.
Trong Rust, mọi giá trị đều có một chủ sở hữu, và khi bạn dùng một giá trị trong vòng lặp, Rust cần biết bạn muốn mượn giá trị đó (chỉ xem tạm thời) hay nhận quyền sở hữu nó (tiêu thụ giá trị đó).
Điều này quan trọng vì nếu một vòng lặp sở hữu dữ liệu của bạn, bạn không thể sử dụng dữ liệu đó sau khi vòng lặp kết thúc. Hiểu rõ sự khác biệt này là chìa khóa để viết vòng lặp đúng cách trong Rust.
Ví dụ, hãy xét dữ liệu sau:
let numbers = vec![1, 2, 3, 4, 5];
let mut sum = 0;Cách 1: Xem dữ liệu (dùng &):
for number in &numbers {
sum += number;
}
println!("I can use it here: {:?}", numbers);Cách 2: Lấy dữ liệu (không dùng &):
for number in numbers {
sum += number;
}
// println!("Can't use {:?} anymore!", numbers);
// Điều này sẽ gây ra lỗiHãy nghĩ theo cách này:
- Dùng
&giống như xem album ảnh: bạn có thể xem tất cả ảnh, nhưng album vẫn nguyên vẹn - Không dùng
&giống như lấy ảnh ra: bạn có thể dùng ảnh, nhưng sau đó album sẽ trống
Bây giờ đến kiểu này:
for num in numbers.iter() {}Tương tự như sau:
for num in &numbers {}Và một vòng lặp thay đổi giá trị, cần khai báo vector với mut:
let mut numbers = vec![1, 2, 3, 4, 5];
for num in numbers.iter_mut() {
*num *= 2;
}Cũng có thể viết như sau:
for num in &mut numbers {
*num *= 2;
}Tự làm thử
Bài học này không có thử thách code.
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 Kiến thức nền tảng
5Các toán tử phần 2
Các toán tử logic phần 1Các toán tử logic phần 2Ôn tập: logic đơn giảnCác toán tử logic phần 311Hàm
Khai báo hàmTham số và đối sốGiá trị trả vềNhiều giá trị trả vềÔn tập: hàm SigmaÔn tập: hàm kiểm tra tính hợp lệ14Duyệt qua mảng
Hướng dẫn về rangeVòng lặp for nâng caoMượn trong vòng lặpCác thao tác phổ biến với mảng3Biến phần 2
Khai báo kiểu dữ liệuQuy ước đặt tênSuy luận kiểu dữ liệuÔn tập: Khởi tạo biếnÉp kiểu dữ liệu9Vòng lặp
Vòng lặp for qua chuỗiVòng lặp whileBreakContinueVòng lặp lồng nhauNhãn vòng lặpVòng lặp vô hạnÔn tập: Đầu vào động12Kiến thức cơ bản về mảng
Khai báo mảngMảng làm tham sốTruy cập phần tửChỉnh sửa mảngÔn tập: In mảng đẹp mắtTự luyện tập: Trình biên dịch Rust online