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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP