Rust联合枚举的类型是什么?

时间:2019-07-11 15:26:00

标签: enums rust

我试图了解Rust枚举类型。具体来说是联合枚举。

让我们从以下代码开始:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=d46d65fc688c1cff48a50077c6d7ddf2

fn main() {
    enum ABC {
        A(u64),
        B,
        C,
    };

    let ins = ABC::A(5);

    match ins {
        ABC::A(_) => println!("A"),
        ABC::B => println!("B"),
        ABC::C => println!("C"),
    };
}

此代码运行良好。现在,让我们尝试将类型ins定义为ABC :: A,但不指定联合。从逻辑上讲,它不起作用;事实并非如此。

fn main() {
    enum ABC {
        A(u64),
        B,
        C,
    };

    let ins = ABC::A;

    match ins {
        ABC::A(_) => println!("A"),
        ABC::B => println!("B"),
        ABC::C => println!("C"),
    };
}

但是,错误消息有点令人困惑:

error[E0308]: mismatched types
  --> src/main.rs:11:9
   |
11 |         ABC::A(_) => println!("A"),
   |         ^^^^^^^^^ expected fn item, found enum `main::ABC`
   |
   = note: expected type `fn(u64) -> main::ABC {main::ABC::A}`
              found type `main::ABC`

Rust似乎并没有抱怨声明没有枚举的枚举变量,而是其他我不理解的事情。

让我们尝试以下代码:

fn main() {
    enum ABC {
        A(u64),
        B,
        C,
    };

    let ins = ABC::A;
}

此代码进行编译。有趣,因为我没想到。从逻辑上讲,Rust应该抱怨我们没有指定u64?

让我们尝试找出此枚举联合的类型:

fn main() {
    enum ABC {
        A(u64),
        B,
        C,
    };

    let ins = ABC::A;

    let integer: u32 = ins;
}

我们收到以下错误,该错误应揭示ins的类型

error[E0308]: mismatched types
  --> src/main.rs:10:24
   |
10 |     let integer: u32 = ins;
   |                        ^^^ expected u32, found fn item
   |
   = note: expected type `u32`
              found type `fn(u64) -> main::ABC {main::ABC::A}`

ins是某种功能吗?还是我想念其他东西?

0 个答案:

没有答案