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
广告