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

Оператор ?

Оператор ? (вопросительный знак) - это удобный механизм для обработки ошибок типа Result. Он работает следующим образом: если результат выражения равен Ok(value), оператор возвращает значение value и выполнение продолжается. Если результат равен Err(e), оператор немедленно возвращает ошибку e из текущей функции. Оператор можно применять только внутри функций, которые возвращают Result (или Option).

Синтаксис

expression?

Пример

Давайте рассмотрим пример, где оператор ? упрощает обработку ошибки при парсинге числа:

fn parse_number(s: &str) -> Result<i32, std::num::ParseIntError> { let num = s.parse::<i32>()?; Ok(num) } fn main() { let res = parse_number("12345"); println!("{:?}", res); }

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

Ok(12345)

Пример

Если строка не может быть преобразована в число, оператор ? вернёт ошибку из функции:

fn parse_number(s: &str) -> Result<i32, std::num::ParseIntError> { let num = s.parse::<i32>()?; Ok(num) } fn main() { let res = parse_number("abcde"); println!("{:?}", res); }

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

Err(ParseIntError { kind: InvalidDigit })

Пример

Оператор ? также работает с Option. В этом случае None возвращается из функции:

fn get_first_char(s: &str) -> Option<char> { let first = s.chars().next()?; Some(first) } fn main() { let res = get_first_char("abcde"); println!("{:?}", res); }

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

Some('a')

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

  • оператор ?,
    который является синонимом оператора ? (устаревший)
  • метод unwrap,
    который извлекает значение или вызывает панику
  • метод expect,
    который извлекает значение или вызывает панику с сообщением
  • метод unwrap_or,
    который возвращает значение по умолчанию при ошибке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить