Vector và nested loop trong Rust
TIL
720
@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

119 bài viết.
1942 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
176 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 4 năm trước
176 46
White
154 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 3 năm trước
154 39
White
117 18
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 3 năm trước
117 18
Bài viết liên quan
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 hơn 1 năm trước
3 1
White
0 4
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 1 năm trước
0 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
119 bài viết.
1942 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á!