РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
643 of 1245 menu

Метод try_for_each

Метод try_for_each применяет заданную функцию к каждому элементу итератора. В отличие от метода for_each, функция должна возвращать тип Result. Если очередной вызов возвращает Err, итерация немедленно прекращается, и метод возвращает эту ошибку. Если все вызовы успешны, метод возвращает Ok(()). Параметром метод принимает замыкание, которому передаётся текущий элемент итератора, а возвращается значение типа Result.

Синтаксис

iter.try_for_each(f)

Пример

Давайте применим метод try_for_each к вектору чисел, где каждый элемент преобразуется в строку, если он положительный:

fn main() { let res: Result<(), String> = vec![1, 2, 3, 4, 5] .iter() .try_for_each(|x| { if *x > 0 { println!("{}", x); Ok(()) } else { Err(format!("Negative: {}", x)) } }); println!("{:?}", res); }

Результат выполнения кода:

1 2 3 4 5 Ok(())

Пример

Теперь рассмотрим случай, когда встречается элемент, вызывающий ошибку, и итерация прерывается:

fn main() { let res: Result<(), String> = vec![1, 2, -3, 4, 5] .iter() .try_for_each(|x| { if *x > 0 { println!("{}", x); Ok(()) } else { Err(format!("Negative: {}", x)) } }); println!("{:?}", res); }

Результат выполнения кода:

1 2 Err("Negative: -3")

Как видно, элементы 4 и 5 не были обработаны, так как итерация остановилась на элементе -3.

Пример

Давайте используем метод try_for_each для работы со строками, где проверяется, что все строки не пустые:

fn main() { let res: Result<(), String> = vec!["abcde", "12345", "xyz"] .iter() .try_for_each(|s| { if !s.is_empty() { println!("{}", s); Ok(()) } else { Err("Empty string found".to_string()) } }); println!("{:?}", res); }

Результат выполнения кода:

abcde 12345 xyz Ok(())

Смотрите также

  • метод for_each,
    который применяет функцию к каждому элементу без остановки
  • метод try_fold,
    который сворачивает итератор с возможностью ошибки
  • метод collect,
    который собирает элементы итератора в коллекцию
  • метод filter_map,
    который фильтрует и преобразует элементы одновременно
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить