Vector và nested loop trong Rust
TIL
633
@100daysTIL
72
White

Huy Trần viết ngày 21/02/2018

#Day016

Mấy nay đang phải làm Rust lại nên lại viết TIL về Rust.

Một trường hợp lỗi mà ai cũng có thể mắc phải khi làm việc với vòng lặp for lồng nhau trong Rust, lấy ví dụ:

let a = vec![1, 2, 3];
let b = vec![4, 5, 6];

for i in a {
  for j in b {
    // do something
  }
}

Đoạn code trên sẽ gặp ngay một cái lỗi khá là hiển nhiên, đó là:

   |
23 |         for j in b {
   |                  ^ value moved here in previous iteration of loop
   |
   = note: move occurs because `b` has type `std::vec::Vec<i32>`, which does not implement the `Copy` trait

Lý do ở đây là ngay từ sau lần lặp đầu tiên bên trong a, thì biến b đã được moved vào trong scope này, dẫn tới lần lặp thứ 2 (thuộc một scope khác) thì b không còn truy cập được nữa.

Giải pháp cho trường hợp này là chỉ lấy tham chiếu của vector cần lặp thay vì chính vector đó để tránh bị moved, trong Rust thì ta có thể lấy tham chiếu của một vector dưới dạng một slice, thông qua hàm as_slice(), đoạn code trên có thể sửa lại thành:

for i in a.as_slice() {
  for j in b.as_slice() {
    // do something
  }
}

huytd 21-02-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Huy Trần

115 bài viết.
1762 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
167 46
Tại sao phải viết blog kĩ thuật? Có rất nhiều bài viết trên mạng nói về vấn đề tại sao một lập trình viên nên thường xuyên viết các bài blog kĩ thu...
Huy Trần viết hơn 3 năm trước
167 46
White
151 39
(Ảnh) Tiếp tục sêri (Link) lần này, chúng ta sẽ cùng tìm hiểu và mô phỏng lại một chức năng mà mọi người đang bắt đầu sử dụng hằng ngày, đó là chứ...
Huy Trần viết hơn 2 năm trước
151 39
White
108 17
Phần 1: Tự truyện Tui và Toán đã từng là hai kẻ thù không đội trời chung trong suốt hơn mười lăm năm ròng rã. Ngay từ ánh nhìn đầu tiên đã ghét nh...
Huy Trần viết hơn 2 năm trước
108 17
Bài viết liên quan
White
0 2
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 5 tháng trước
0 2
White
3 1
Javascript inititalValue trong reduce() có quan trọng không? Day 41: Đọc code mẫu về hàm reduce() trong (Link), thấy hàm reduce() khá "đơn giản"....
Minh-Trung Nguyễn viết 7 tháng trước
3 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
115 bài viết.
1762 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!