Tôi đang cố gắng viết một chương trình liên quan đến việc lọc và xếp chồng lên các mảng. Tôi đã sử dụng The Rust Programming Language, first edition làm tài liệu tham khảo, nhưng tôi không hiểu điều gì sẽ xảy ra khi tôi tạo vòng lặp qua mảng. Dưới đây là một ví dụ:Làm cách nào để lặp qua một mảng?
fn compiles() {
let range = (1..6);
let range_iter = range.into_iter();
range_iter.filter(|&x| x == 2);
}
fn does_not_compile() {
let array = [1, 4, 3, 2, 2];
let array_iter = array.into_iter();
//13:34 error: the trait `core::cmp::PartialEq<_>` is not implemented for the type `&_` [E0277]
array_iter.filter(|&x| x == 2);
}
fn janky_workaround() {
let array = [1, 4, 3, 2, 2];
let array_iter = array.into_iter();
// Note the dereference in the lambda body
array_iter.filter(|&x| *x == 2);
}
Trong chức năng đầu tiên, tôi làm theo mà các iterator trên phạm vi không mất quyền sở hữu, vì vậy tôi phải mất một &x
trong lambda filter
's, nhưng Tôi không hiểu tại sao ví dụ thứ hai với mảng hoạt động khác nhau.
Cảm ơn bạn! Tôi đã chọn câu trả lời này bởi vì nó hướng dẫn tôi qua cách tôi có thể đã sử dụng trình biên dịch để tự mình tìm ra nó. Tôi cũng đánh giá cao các liên kết để tìm hiểu thêm. – WillEngler