TryFrom 和 TryInto

在前一章中,我们学习了 From 和 Into 特性,这是 Rust 中用于肯定不会出错类型转换的习惯用法接口。但如果转换不能保证成功呢?

我们现在对错误有足够的了解,可以讨论 From 和 Into 的可能出错对应物:TryFrom 和 TryInto。

TryFrom 和 TryInto

TryFrom 和 TryInto 都定义在 std::convert 模块中,和 From 与 Into 一样。

#![allow(unused)]
fn main() {
pub trait TryFrom<T>: Sized {
    type Error;
    fn try_from(value: T) -> Result<Self, Self::Error>;
}

pub trait TryInto<T>: Sized {
    type Error;
    fn try_into(self) -> Result<T, Self::Error>;
}
}

From/Into 与 TryFrom/TryInto 之间的主要区别在于后者返回一个 Result 类型。这允许转换失败,并返回错误而不是导致恐慌。

Self::Error

TryFrom 和 TryInto 都有一个关联的 Error 类型。这让每个实现都能指定自己的错误类型,理想情况下,该错误类型最适合尝试进行的转换。

Self::Error 是一种引用在特性自身中定义的关联错误类型的方式。

互补性

就像 From 和 Into 一样,TryFrom 和 TryInto 也是互补的特征。如果你为某个类型实现了 TryFrom,那么就会免费获得 TryInto。

参考资料

  • 本节练习位于 exercises/05_ticket_v2/13_try_from