你可以使用ok()
和unwrap_or()
功能:
fn test() -> Option> { Some(Ok(1)) } fn main() { let x: Option > = test(); println!("{:?}", x.map(|r| r.ok()).unwrap_or(None)); }
Option
您可以组合:而不是首先创建一个:
Option::and_then
,它应用一个返回Option
和平展结果的闭包.
Result::ok
,它转换一个Result
到Option
,丢弃错误.
fn main() { let some_option = Some("too".to_owned()); let new_option = some_option.and_then(|x| x.parse::().ok()); }
您可以使用相同的两个工具来回答您的直接问题:
fn convert(a: Option >) -> Option { a.and_then(Result::ok) }