Rust 中 Try-Catch 語句的等價物

Muhammad Adil 2022年6月15日
Rust 中 Try-Catch 語句的等價物

Rust 是一種程式語言,它提供了一種更安全、更可靠的軟體開發方式。它旨在防止導致其他語言安全漏洞的常見錯誤。

Rust 語言不支援異常處理,這意味著它在 Rust 中沒有 try-catch 語句。

Rust 中缺少異常處理消除了由於函式丟擲異常而導致執行時錯誤的可能性。這是因為程式將在發生錯誤的地方停止,而不是繼續並可能導致程式碼庫中的其他問題。

本文將討論 Rust 等價於 try-catch 語句。

等價於 Rust 中的 try-catch 語句

Rust 中有許多等價的 try-catch 語句。但是,在本文中,我們將只討論幾個最接近的等價物。

在 Rust 中使用 ? 操作符

在 Rust 中,我們可以使用 ? 運算子返回或不返回值。

? 運算子是 Rust 的基本特性之一,它可以以多種不同的方式使用。它可以檢查一個值是否存在,一個值是否已分配給一個變數,或者一個表示式的計算結果是否為真或假。

? 運算子也可以用作 Rust 的 try-catch 語句的替代方案。這 ? 運算子將閉包作為其引數。

然後可以呼叫閉包,而不必擔心如果在執行期間發生錯誤會發生什麼。

? 如果沒有錯誤,運算子將捕獲錯誤並返回閉包的值,或者如果有錯誤,它將返回一個錯誤型別,並描述發生了什麼錯誤。

例子:

fn main() {
    let hello_tasks = || -> Result<(), HelloError> {
        hello_task_1()?;
        hello_task_2()?;
        hello_task_3()?;
        Ok(())
    };
    if let Err(_err) = hello_tasks() {
        println!("There's an error in your code, please correct it");
    }
}
enum HelloError {
    HelloTask1Error,
    HelloTask2Error,
    HelloTask3Error,
}
fn hello_task_1() -> Result<(), HelloError> {
    println!("Task No 1");
    Ok(())
}
fn hello_task_2() -> Result<(), HelloError> {
    println!("Task No 2");
    Err(HelloError::HelloTask2Error)
}
fn hello_task_3() -> Result<(), HelloError> {
    println!("task3");
    Ok(())
}

輸出:

Task No 1
Task No 2
There's an error in your code, please correct it

點選這裡檢視上述程式碼的演示。

作者: Muhammad Adil
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook