#![feature(result_into_ok_or_err)] let ok: Result = Ok(3); let err: Result = Err(4); assert_eq!(ok.into_ok_or_err(), 3); assert_eq!(err.into_ok_or_err(), 4); 相关用法 Rust Result.into_ok用法及代码示例 Rust Result.into_err用法及代码示例 Rust Result.is_err用法及代码...
// ok_or:映射为 Result // 如果 foo 有值,那么 int_result = Ok(123) // 如果 foo 没有值,那么 int_result = Err("error message") let int_result = foo.ok_or("error message"); // ok_or_else 使用闭包映射,结果上同 let int_result = foo.ok_or_else(|| "error message"); 2 Re...
or_else 处理一个Result并返回一个Result,当前是某种错误时,通过传入的op方法,处理错误;如果是非错误类型,则不受影响。 pub fn or_else<F, O: FnOnce(E) -> Result<T, F>>(self, op: O) -> Result<T, F> { match self { Ok(t) => Ok(t), Err(e) => op(e), } } or_else 通常用于...
fn safe_divide(x: i32, y: i32) -> Result<i32, String> { match divide(x, y) { Ok(quotient) => Ok(quotient), Err(e) => Err(e), } } fn main() { let result = safe_divide(10, 0).unwrap_or_else(|e| e); println!("{}", result); } 在这个例子中,safe_divide函数使用mat...
方式二、使用组合子,如将Option转换成Result,从而可以使用问号,如 let res = get_something().ok_or_else(|| err)?; 这里ok_or_else是option上的组合子。什么是组合子,简单理解是将东西组合在一起的函数。至于”子“,一种称谓罢了,要说相似的话,第一反应类似套接字里面的”字“的功能。
result.ok()(成功值) 以Option<T>类型返回成功值(如果有的话)。如果result是成功的结果,就返回Some(success_value);否则,返回None,并丢弃错误值。 result.err()(错误值) 以Option<E>类型返回错误值(如果有的话)。 result.unwrap_or(fallback)(解包或回退值) ...
调用了panic方法,这意味着如果Result返回的是Err,则程序会崩溃,可以试一把:如果Err发生时不希望程序崩溃,可以使用unwrap_or()1 2 3 let result_fail: Result<String, String> = Result::Err(String::from("failure")); let result = result_fail.unwrap_or(String::from("err occur")); println!("{}"...
将Option<T> 转换为 Result<T, E> ,将 Some(v) 映射到 Ok(v) 并将 None 映射到 Err(err) 。 传递给ok_or 的参数被热切评估;如果要传递函数调用的结果,建议使用 ok_or_else ,它是惰性求值的。 例子 let x = Some("foo"); assert_eq!(x.ok_or(0), Ok("foo")); let x: Option<&str> ...
Code fn main() { fallible().ok(); } fn fallible() -> Result<(), ()> { unimplemented!() } Current output None Desired output warning: unused return value of `ok` that must be used Rationale and extra context Same for Result::err() of cour...
例2中还用到了Result的unwrap_or_else方法,Result类型定义了很多辅助方法来处理各种情况。除了unwrap_or_else外,还有: unwrap方法: 如果Result的值是成员Ok,unwrap就返回Ok的值;如果Result的值是成员Err,unwrap就会调用panic! expect方法: 与unwrap的使用方式一样,允许我们传参指定panic!的信息 ...