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