Метод try_from
Метод try_from выполняет преобразование одного типа
в другой с возможностью ошибки. В отличие от метода
from, который всегда успешен, try_from
возвращает Result: Ok при успешном
преобразовании и Err, если преобразование
невозможно. Параметром метод принимает значение,
которое нужно преобразовать. Метод относится к трейту
TryFrom и чаще всего вызывается через
Type::try_from.
Синтаксис
Type::try_from(value)
Пример
Давайте преобразуем число 100 типа i32
в тип u8:
fn main()
{
let res = u8::try_from(100i32);
println!("{:?}", res);
}
Результат выполнения кода:
Ok(100)
Пример
Давайте попробуем преобразовать число 300 типа
i32 в тип u8. Это невозможно,
так как максимум для u8 равен 255:
fn main()
{
let res = u8::try_from(300i32);
println!("{:?}", res);
}
Результат выполнения кода:
Err(TryFromIntError(()))
Пример
Давайте обработаем результат преобразования с помощью
match и выведем разные сообщения:
fn main()
{
let value = 300i32;
match u8::try_from(value) {
Ok(n) => println!("Success: {}", n),
Err(_) => println!("Conversion failed"),
}
}
Результат выполнения кода:
"Conversion failed"
Пример
Давайте преобразуем срез чисел типа i32
в массив [i32; 5]:
fn main()
{
let slice: &[i32] = &[1, 2, 3, 4, 5];
let res = <[i32; 5]>::try_from(slice);
println!("{:?}", res);
}
Результат выполнения кода:
Ok([1, 2, 3, 4, 5])