在阅读Rust's convert.rs时,我遇到了以下代码:

#[unstable(feature = "try_from", issue = "33417")]
#[derive(Clone, Copy, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)]
pub enum Infallible {}

#[unstable(feature = "try_from", issue = "33417")]
impl fmt::Display for Infallible {
    fn fmt(&self, _: &mut fmt::Formatter) -> fmt::Result {
        match *self {
        }
    }
}
Infallible是一个空的枚举,没有任何变体。 match *self {}返回什么?

最佳答案

由于Infallible没有可能的值,因此您永远无法拥有它的实例。这意味着匹配永远不会发生。 Rust通过对空枚举进行匹配来生成!类型,这是一种没有值的内置类型,从而表示了这一点。

此类型强制转换为其他任何类型,因为永远无法到达该语句,因为为此您需要一个Infallible类型的值,出于明显的原因,您不能没有该值。

10-02 21:26