Enum core::convert::Infallible 1.34.0[−][src]
pub enum Infallible {}Expand description
永远不会发生的错误的错误类型。
由于此枚举没有变体,因此这种类型的值实际上永远不会存在。
这对于使用 Result 并参数化错误类型的泛型 API 很有用,以指示结果始终为 Ok。
例如,对于存在反向 Into 实现的所有类型,TryFrom trait (返回 Result 的转换) 都具有通用实现。
ⓘ
impl<T, U> TryFrom<U> for T where U: Into<T> {
type Error = Infallible;
fn try_from(value: U) -> Result<Self, Infallible> {
Ok(U::into(value)) // 永不返回 `Err`
}
}RunFuture 兼容性
该枚举与 never 类型 (!) 具有相同的作用,在此版本的 Rust 中是不稳定的。
当 ! 稳定后,我们计划将 Infallible 用作它的类型别名:
ⓘ
pub type Infallible = !;Run… 并最终弃用 Infallible。
但是,在一种情况下,可以在将 ! 稳定为完整类型之前使用 ! 语法:在函数的返回类型位置。
具体来说,可以实现两种不同的函数指针类型:
trait MyTrait {}
impl MyTrait for fn() -> ! {}
impl MyTrait for fn() -> std::convert::Infallible {}RunInfallible 是一个枚举,这个代码是有效的。
但是,当 Infallible 成为 never type 的别名时,两个 impl 将开始重叠,因此将被语言的 trait 一致性规则所禁止。