8.2.6.1 Iterator::any
Iterator::any는 전달받은 반복자 중에 어떤 요소가 조건을 만족하면 true를 반환하는 함수이다. 그렇지 않으면 false. 그 선언이다:
pub trait Iterator {
// 반복되는 타입.
type Item;
// `any`가 취하는 `&mut self`가 뜻하는 바는 호출자가 대여하거나
// 수정할 지도 모르지만, 소모하지는 않는다.
fn any<F>(&mut self, f: F) -> bool where
// `FnMut`은 모든 캡쳐된 변수를 대부분 수정하지만 소모하진 않는다.
// `Self::Item`
// `FnMut` meaning any captured variable may at most be
// modified, not consumed. `Self::Item` states it takes
// arguments to the closure by value.
F: FnMut(Self::Item) -> bool {}
}
fn main() {
let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
// vec의 `iter() `는 `&i32`를 산출한다. `i32`로 역구조화 된다.
println!("2 in vec1: {}", vec1.iter() .any(|&x| x == 2));
// vec의 `into_iter()`는 ` i32`를 산출한다. 역구조화가 필요치 않다.
println!("2 in vec2: {}", vec2.into_iter().any(| x| x == 2));
let array1 = [1, 2, 3];
let array2 = [4, 5, 6];
// 배열의 `iter() `는 `&i32`를 산출한다.
println!("2 in array1: {}", array1.iter() .any(|&x| x == 2));
// 배열의 `into_iter()`는 `&i32`를 산출한다. - 비일반적
println!("2 in array2: {}", array2.into_iter().any(|&x| x == 2));
}