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

120 bài viết.
2067 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
186 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 gần 6 năm trước
186 46
White
157 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 gần 5 năm trước
157 39
White
121 19
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 gần 5 năm trước
121 19
Bài viết liên quan
White
0 5
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 gần 3 năm trước
0 5
White
4 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết hơn 2 năm trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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