以下の内容はhttps://shuzo-kino.hateblo.jp/entry/2024/10/25/231608より取得しました。


Ubuntu22LTSでRust言語をやる その4:エラーハンドリング

インターネットの強い人たちが絶賛するRustのすごいトコの一つ、エラーハンドリングを見ていきます。

実際のところ

matchでエラーの有無により挙動を切り替えできる。

use std::error::Error;
use std::fs::File;

fn complex_operation() -> Result<(), Box<dyn Error>> {
    // ファイル操作のエラー
    let file = File::open("data.txt")?; // io::Error → Box<dyn Error>
    
    // パースのエラー
    let number = "123".parse::<i32>()?; // io::Error → Box<dyn Error>
    
    Ok(())
}

// 呼び出し側
fn main() {
    match complex_operation() {
        Ok(_) => println!("Success!"),
        Err(e) => println!("Error occurred: {}", e),
    }
}

ここで、"?"演算子は以下のような挙動を展開……らしい。
なので、エラーが生じた瞬間に関数から出るという事になる。
演算子であってマクロではないので、マクロと呼ぶなら頭の皮を剥がれる覚悟をしないといけない。

let file = match File::open("data.txt") {
    Ok(file) => file,
    Err(e) => return Err(Box::new(e)),  // ここでエラーを変換してreturn
};



以上の内容はhttps://shuzo-kino.hateblo.jp/entry/2024/10/25/231608より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14