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 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始吧
廣告
© . All rights reserved.