8.2.6.2 Iterator::find
Iterator::find
는 전달되는 반복자 중에 조건을 만족하는 첫 요소를 Option
으로 반환한다. 그 선언이다:
pub trait Iterator {
// 반복되는 형식.
type Item;
// `find`는`& mut self '를 취하며 그 의미는 호출자가 대여하거나
// 수정될 수는 있어도 소비되지 않는다.
fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where
// `FnMut`의 의미는 모든 캡쳐된 변수가 대부분 수정될 수 있고
// 소비되지는 않는다.
// '&Self::Item`은 클로져에 대한 인수를 참조로 받습니다.
P: FnMut(&Self::Item) -> bool {}
}
fn main() { let vec1 = vec![1, 2, 3]; let vec2 = vec![4, 5, 6]; // vec의 `iter() `는 `&i32`를 산출. let mut iter = vec1.iter(); // vec의 `into_iter()`는 `i32`를 산출. let mut into_iter = vec2.into_iter(); // 생성되는 참조는 `&&i32`이다. `i32`로 역구조화 된다. println!("Find 2 in vec1: {:?}", iter .find(|&&x| x == 2)); // 생성되는 참조는 ` &i32`이다. `i32`로 역구조화 된다. println!("Find 2 in vec2: {:?}", into_iter.find(| &x| x == 2)); let array1 = [1, 2, 3]; let array2 = [4, 5, 6]; // 배열의 `iter() `는 `&i32`를 생성. println!("Find 2 in array1: {:?}", array1.iter() .find(|&&x| x == 2)); // 배열의 `into_iter()`는 `&i32`를 생성. - 비일반적. println!("Find 2 in array2: {:?}", array2.into_iter().find(|&&x| x == 2)); }