我正在尝试在Rust中使用match
。我写了一个函数:
fn main() {
let try = 3;
let x = match try {
Some(number) => number,
None => 0,
};
}
但是我收到了错误:
error[E0308]: mismatched types
--> src/main.rs:4:9
|
4 | Some(number) => number,
| ^^^^^^^^^^^^ expected integral variable, found enum `std::option::Option`
|
= note: expected type `{integer}`
found type `std::option::Option<_>`
error[E0308]: mismatched types
--> src/main.rs:5:9
|
5 | None => 0,
| ^^^^ expected integral variable, found enum `std::option::Option`
|
= note: expected type `{integer}`
found type `std::option::Option<_>`
我尝试了类似let try: i32 = 3;
的内容,以确保try
是一个整数值,但我仍然得到相同的错误。
答案 0 :(得分:2)
我想你想要这个:
fn main() {
let try = Some(3);
let x = match try {
Some(number) => number,
None => 0,
};
}
问题在于您尝试将Some(...)
和None
的整数与Option
匹配。这不是真的有意义......一个整数永远不能是None
。
相反,我认为您希望使用类型Option<i32>
并使用默认值将其转换为i32
。上面的代码应该实现。请注意,如果您只是尝试这样做,这是一种更简单的方法:
let x = try.unwrap_or(0);
答案 1 :(得分:1)
在match
表达式中,您匹配的值的类型必须与其后面的块中的变体相对应;在您的情况下,这意味着try
需要Option
或match
块需要具有整数变体。
我强烈建议您阅读The Rust Book; Rust是强类型的,这是您需要熟悉的最基本的概念之一。