TryFromTryInto

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

我们现在对错误有足够的了解,可以讨论 FromInto可能出错对应物:TryFromTryInto

TryFromTryInto

TryFromTryInto 都定义在 std::convert 模块中,和 FromInto 一样。

#![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/IntoTryFrom/TryInto 之间的主要区别在于后者返回一个 Result 类型。这允许转换失败,并返回错误而不是导致恐慌。

Self::Error

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

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

互补性

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

参考资料

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