在 Rust 中,處理異常的主要方法是使用 Result
類型和 ?
運算符。Result
是一個枚舉類型,表示操作可能成功(Ok
)或失敗(Err
)。?
運算符用于將 Result
類型的結果傳播到上層作用域,如果 Result
是 Err
,則會立即返回錯誤;如果 Result
是 Ok
,則會解包值并繼續執行。
以下是一個簡單的示例,展示了如何使用 Result
和 ?
運算符處理異常:
use std::fs::File;
use std::io::Read;
fn read_file_contents(file_path: &str) -> Result<String, std::io::Error> {
let mut file = File::open(file_path)?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
Ok(contents)
}
fn main() {
match read_file_contents("example.txt") {
Ok(contents) => println!("File contents: {}", contents),
Err(error) => eprintln!("Error reading file: {}", error),
}
}
在這個示例中,我們定義了一個名為 read_file_contents
的函數,它接受一個文件路徑作為參數,并返回一個 Result<String, std::io::Error>
類型。我們使用 File::open
打開文件,并使用 ?
運算符將可能的錯誤傳播到上層作用域。如果文件打開成功,我們繼續讀取文件內容并將其存儲在 contents
變量中。最后,我們返回 Ok(contents)
。
在 main
函數中,我們使用 match
語句處理 read_file_contents
函數的返回值。如果操作成功(Ok(contents)
),我們打印文件內容;如果操作失敗(Err(error)
),我們打印錯誤信息。