Result
enum Result<T, E>{ Ok(T), Err(E), }
fn get_value_bad(v: bool, result: &mut usize) -> usize { if v { *result = 100; true } else { false } } fn get_value_good(v: bool) -> Result<usize, &'static str> { if v { OK(100) } else { Err("error message") } } fn main(){ let mut result = 0; if get_value_bad(true, &mut result){ println!("success: {}", result); } else { println!("failure"); } match get_value_good(true){ Ok(result) => println!("success: {}", result), Err(msg) => println!("failure") } }
fn plus_one(x: Option<i32>) -> Option<i32> { match x { None => None, Some(i) => Some(i + 1), } } fn main(){ let five = Some(5); let six = plus_one(five); let none = plus_one(None); }
use std::fs::File; fn main(){ let f = File::open("hello.txt"); let _f = match f { Ok(file) => file, Err(error) => { panic!("There was a problem opening the file: {:?}", error); } }; }
OptionはSome, None, ResultはOk, Errで共にエラーハンドリングなどで使うのね。