Rust 编程中的 Result 类型


Rust 中会发生两种类型的错误,即可恢复错误不可恢复错误。我们借助panic!宏Result 类型来处理不可恢复错误,此外还借助其他方法来处理可恢复错误。Result 类型Option 类型的更高级版本,它只描述可能的错误,而不是可能的缺失。

签名

Result 类型的签名是Result < T, E>,它只有两个可能的结果。

如下所示

  •  Ok(T): 找到元素 T。
  • Err(E): 找到一个包含元素 E 的错误。

Rust 还提供了不同的方法,我们可以将这些方法与Result 类型关联起来。我们主要使用unwrap()方法。

有一些方法会返回 Result 类型的错误,其中之一是parse()

示例

考虑下面显示的示例 −

fn multiply(first_number_str: &str, second_number_str: &str) -> i32 {
   let first_num = first_number_str.parse::().unwrap();
   let second_num = second_number_str.parse::().unwrap();
   first_num * second_num
}
fn main() {
   let twenty = multiply("10", "2");
   println!("double is {}", twenty);
   let tt = multiply("9", "2");
   println!("double is {}", tt);
}

double is 20
double is 18

由于我们在调用函数时传递的数字是有效的整数,因此以上代码正常工作。

现在,考虑将其中一个整数更改为不是int的内容,以便我们遇到 Result 类型错误。

示例

考虑下面所示的更新代码

fn multiply(first_number_str: &str, second_number_str: &str) -> i32 {
   let first_num = first_number_str.parse::().unwrap();
   let second_num = second_number_str.parse::().unwrap();
   first_num * second_num
}
fn main() {
   let twenty = multiply("10", "2");
   println!("double is {}", twenty);
   let tt = multiply("t", "2");
   println!("double is {}", tt);
}

thread 'main' panicked at 'called `Result::unwrap()` on an `Err`
value: ParseIntError { kind: InvalidDigit }', src/main.rs:2:56
note: run with `RUST_BACKTRACE=1` environment variable to display
a backtrace
double is 20

更新于:03-Apr-2021

140 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始吧
广告