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