为什么在匹配整数时会出现错误“期望的积分变量,找到选项”?

时间:2017-06-28 06:57:47

标签: rust match

我正在尝试在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是一个整数值,但我仍然得到相同的错误。

2 个答案:

答案 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需要Optionmatch块需要具有整数变体。

我强烈建议您阅读The Rust Book; Rust是强类型的,这是您需要熟悉的最基本的概念之一。