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

Метод source

Метод source возвращает опциональную ссылку на источник ошибки - ошибку, которая вызвала текущую ошибку. Он возвращает Some со ссылкой на источник, если он есть, и None в противном случае. Параметров метод не принимает. Метод доступен для типов, реализующих трейт Error.

Синтаксис

error.source()

Пример

Давайте создадим две ошибки и свяжем их, после чего получим источник:

use std::error::Error; use std::fmt; #[derive(Debug)] struct InnerError; impl fmt::Display for InnerError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "inner error") } } impl Error for InnerError {} #[derive(Debug)] struct OuterError { source: InnerError, } impl fmt::Display for OuterError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "outer error") } } impl Error for OuterError { fn source(&self) -> Option<&(dyn Error + 'static)> { Some(&self.source) } } fn main() { let err = OuterError { source: InnerError }; let res = err.source(); println!("{:?}", res); }

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

Some(InnerError)

Пример

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

use std::error::Error; use std::fmt; #[derive(Debug)] struct SimpleError; impl fmt::Display for SimpleError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "simple error") } } impl Error for SimpleError {} fn main() { let err = SimpleError; let res = err.source(); println!("{:?}", res); }

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

None

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

  • трейт Error,
    который представляет базовый трейт для ошибок
  • метод source,
    который возвращает источник ошибки
  • макрос panic!,
    который останавливает выполнение программы с ошибкой
  • оператор ?,
    который распространяет ошибку вверх по стеку вызовов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить