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

Трейт TryFrom

Трейт TryFrom выполняет преобразование значения одного типа в значение другого типа с проверкой. Если преобразование невозможно, возвращается ошибка в виде Err. Параметром трейт принимает значение, которое нужно преобразовать. Результатом работы метода try_from является Result: Ok при успешном преобразовании или Err при невозможности выполнить преобразование.

Трейт TryFrom является безопасной альтернативой трейту From, когда преобразование может завершиться неудачей. Например, при преобразовании большого числа в более узкий тип данные могут не поместиться.

Синтаксис

impl TryFrom<Source> for Target { type Error = ErrorType; fn try_from(value: Source) -> Result<Self, Self::Error> { // conversion logic } }

Пример

Давайте преобразуем число i32 в тип u8. Если число помещается в диапазон u8 (от 0 до 255), преобразование пройдёт успешно:

use std::convert::TryFrom; fn main() { let num: i32 = 100; let res = u8::try_from(num); println!("{:?}", res); }

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

Ok(100)

Пример

А теперь попробуем преобразовать число i32, которое не помещается в диапазон u8. В этом случае вернётся ошибка:

use std::convert::TryFrom; fn main() { let num: i32 = 500; let res = u8::try_from(num); println!("{:?}", res); }

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

Err(TryFromIntError(()))

Пример

Давайте обработаем результат преобразования с помощью match, чтобы вывести понятное сообщение об успехе или ошибке:

use std::convert::TryFrom; fn main() { let num: i32 = 200; match u8::try_from(num) { Ok(val) => println!("Success: {}", val), Err(e) => println!("Error: {:?}", e), } }

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

Success: 200

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

  • трейт From,
    который выполняет преобразование без возможности ошибки
  • трейт TryInto,
    который является обратным к трейту TryFrom
  • метод try_from,
    который выполняет преобразование через трейт TryFrom
  • метод try_into,
    который выполняет преобразование через трейт TryInto
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить