よく使う型変換の tips です。
Result -> Option
let res: Result<&str, &str> = Ok("hogehoge");
assert_eq!(Some("hogehoge"), res.ok());
Err
は None
になります。
Option -> Result
let opt = Some("fugafuga");
assert_eq!(Ok("fugafuga"), opt.ok_or("error!"));
let opt: Option<&str> = None;
assert_eq!(Err("error!"), opt.ok_or("error!"));
ok_or
の引数には None
のときに Err
としてとる値を記述する必要があります。
Option, Result を安全に unwrap
let opt = Some("hogehoge");
assert_eq!("hogehoge", opt.unwrap_or("fugafuga"));
let opt = None;
assert_eq!("fugafuga", opt.unwrap_or("fugafuga"));
let res: Result<&str, &str> = Ok("hogehoge");
assert_eq!("hogehoge", res.unwrap_or("fugafuga"));
let res: Result<&str, &str> = Err("error!");
assert_eq!("fugafuga", res.unwrap_or("fugafuga"));
unwrap_or
は unwrap
失敗時に使われるデフォルト値を設定して unwrap
する関数です。
おわり
or
より or_else
の方がパフォーマンス的に推奨されますが、or_else
は定数の代わりに関数書かないといけないのでちょっと敬遠しがちです。