Метод try_into
Метод try_into выполняет преобразование между типами,
которое может завершиться ошибкой. В отличие от метода
into, который всегда успешен, метод try_into
возвращает тип Result, содержащий либо успешно
преобразованное значение, либо ошибку. Метод не принимает
параметров и вызывается на значении, которое нужно преобразовать.
Для использования метода необходимо, чтобы целевой тип реализовывал
типаж TryFrom.
Синтаксис
let res: TargetType = value.try_into()?;
Пример
Давайте попробуем преобразовать число типа i32
в тип u8. Так как число 100 помещается
в диапазон типа u8, преобразование пройдёт успешно:
fn main()
{
let num: i32 = 100;
let res: Result<u8, _> = num.try_into();
match res
{
Ok(val) => println!("Ok: {}", val),
Err(e) => println!("Err: {}", e),
}
}
Результат выполнения кода:
Ok: 100
Пример
А теперь попробуем преобразовать число 300 типа
i32 в тип u8. Число 300 не помещается
в диапазон типа u8 (от 0 до 255), поэтому
преобразование вернёт ошибку:
fn main()
{
let num: i32 = 300;
let res: Result<u8, _> = num.try_into();
match res
{
Ok(val) => println!("Ok: {}", val),
Err(e) => println!("Err: {}", e),
}
}
Результат выполнения кода:
Err: out of range integral type conversion attempted
Пример
Давайте преобразуем строку "12345" в число
типа i32 с помощью метода try_into:
use std::convert::TryInto;
fn main()
{
let s = "12345";
let res: Result<i32, _> = s.try_into();
match res
{
Ok(val) => println!("Ok: {}", val),
Err(e) => println!("Err: {}", e),
}
}
Результат выполнения кода:
Ok: 12345