空枚举上的匹配返回什么?

时间:2017-12-01 08:51:47

标签: enums rust

阅读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 {}返回什么?

1 个答案:

答案 0 :(得分:9)

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

此类型强制转换为任何其他类型,因为永远无法访问该语句,因为您需要类型为Infallible的值,这是因为显而易见的原因。