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を理解すると、エラー処理の書き方が変わってきますね。