【Rust】Result型によるエラー処理

fn main() {

    let value = check_negative(-32);
    println!("{:?}", value);

    let value = check_negative(10);
    println!("{:?}", value);
}

fn check_negative(num: i32) -> Result<i32, Box<dyn std::error::Error>> {
    if num < 0 {
        return Err("負の値です".into());
    }
    Ok(num)
}

Compiling app v0.1.0 (/home/vagrant/dev/rust/app)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.40s
Running `target/debug/app`
Err(“負の値です”)
Ok(10)

Box>はかなり頻繁に見るが、意味合いとしては
Box: ヒープ上にデータを格納するためのスマートポインタ
dyn: dynamicの略。実行時にトレイトの具体的な型を決めたいときに使う
error::Error: Rustの標準ライブラリのerrorモジュールにあるErrorトレイト

エラートレイトの何らかの値を返す
Resultを理解すると、エラー処理の書き方が変わってきますね。