Я пытаюсь написать программу, которая включает в себя фильтрацию и складывание по массивам. Я использовал The Rust Programming Language, first edition в качестве ссылки, но я не понимаю, что происходит, когда я формирую итераторы по массивам. Вот пример:Как перебирать массив?
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);
}
В первой функции, я следую, что итератор в диапазоне не брать на себя ответственность, поэтому я должен взять в лямбда filter
«s в &x
, но Я не понимаю, почему второй пример с массивом ведет себя по-разному.
Спасибо! Я выбрал этот ответ, потому что он прошел через меня, как я мог использовать компилятор, чтобы понять это самостоятельно. Я также оценил ссылки, чтобы узнать больше. – WillEngler