Rust 编程中的结果类型
Rust中会发生两种类型的错误,可恢复错误或不可恢复错误。我们在panic!宏的帮助下处理不可恢复的错误!宏和Result类型以及其他帮助处理可恢复的errors.TheResult类型是Option类型的更好版本,它只描述可能的错误而不是可能的缺失。
签名
ResultType的签名是Result
这些是:
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