我试图了解Rust枚举类型。具体来说是联合枚举。
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
是某种功能吗?还是我想念其他东西?