Метод inspect
Метод inspect создаёт новый итератор, который
вызывает переданную функцию для каждого элемента
по мере его прохождения, но возвращает исходный
элемент без изменений. Параметром метод принимает
замыкание, которое получает ссылку на очередной
элемент и может выполнить любое побочное действие,
например, вывести значение на экран или записать
его в журнал. Метод удобен для отладки цепочек
итераторов, когда нужно посмотреть промежуточные
значения, не нарушая логику обработки.
Синтаксис
iter.inspect(f)
Пример
Давайте создадим итератор по вектору чисел
и с помощью inspect выведем каждое
значение в процессе обработки:
fn main()
{
let res: Vec<i32> = vec![1, 2, 3, 4, 5]
.into_iter()
.inspect(|x| println!("inspect: {}", x))
.map(|x| x * 2)
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
inspect: 1
inspect: 2
inspect: 3
inspect: 4
inspect: 5
[2, 4, 6, 8, 10]
Пример
Давайте используем inspect вместе
с filter, чтобы увидеть, какие элементы
проходят фильтрацию:
fn main()
{
let res: Vec<i32> = vec![1, 2, 3, 4, 5]
.into_iter()
.inspect(|x| println!("before filter: {}", x))
.filter(|x| x % 2 == 0)
.inspect(|x| println!("after filter: {}", x))
.collect();
println!("{:?}", res);
}
Результат выполнения кода:
before filter: 1
before filter: 2
after filter: 2
before filter: 3
before filter: 4
after filter: 4
before filter: 5
[2, 4]