用法pub fn unwrap_or_else<F: FnOnce(E) -> T>(self, op: F) -> T 返回包含的 Ok 值或从闭包计算它。例子基本用法:fn count(x: &str) -> usize { x.len() } assert_eq!(Ok(2).unwrap_or_else(count), 2); assert_eq!(Err("foo").unwrap_or_else(count), 3);...
("called `Result::unwrap()` on an `Err` value: {:?}", err), } }} 没错和Option一样,不同的是,Result包括了错误的详细描述,这对于调试人员来说,这是友好的。 除此之外,相比于Option, Result也有一些特有的针对错误类型的方法map_err和or_else等。 其中: map_err 处理一个Result,当前是某种错误...
unwrap_or("100"); 或者您可以将其放入函数中并使用 ?。 fn read_content_length(resp: &reqwest::Response) -> Option<&str> { resp.headers() .get(reqwest::header::CONTENT_LENGTH)? .to_str() .ok() } let resp_headers: &str = read_content_length(&resp).unwrap_or("100"); 但是...
这样代码就变得简单了, 我们之后会学习闭包和unwrap_or_else的用法 失败时 panic 的快捷方式# 如果我们想要在返回错误时直接进行panic 抛出, 并打印错误信息, 有两个简写unwrap和expect 对于unwrap, 如果调用成功, 则会返回Ok中的值, 如果错误则会为我们调用panic! usestd::fs::File;fnmain(){letf=File::open...
fn unwrap(self) -> T { match self { Option::Some(val) => val, Option::None => panic!("called `Option::unwrap()` on a `None` value"), } } } unwrap方法抽象出了 case analysis。这正是unwrap的工程化用法。不幸的是,panic!意味着unwrap并不是可组合的:它是瓷器店中的公牛。
最常见的疑问都是关于Result的,包括unwrap_or和and_then。此外,由于Result有第二个类型参数,因此存在一些处理错误类型的组合子,例如map_err(不是map) 和or_else(而不是and_then)。 Result 类型别名惯用法(TheResulttype alias idiom) 在标准库中,您可能经常看到Result<i32>这样的类型。但是等等,我们定义了Result有...
我们之前已经接触过把闭包传给函数了,比如unwrap_or_else。其实函数也能传给函数。 通俗的说就是把函数作为参数传给另一个函数。当一个函数作为另一个函数的参数时,它的类型在另一个函数中实际上是fn,也就是函数指针。 另外参数名一般叫f。 用法上和传闭包类似,直接来看个例子。
当然这种写法很低级,当然有更高级的:unwrap_or()。该方法的意思为,如果a为空,则返回一个自定义的值,例如: let vec = vec![1,2,3]; let a = vec.get(4).unwrap_or(&123) 1. 2. 其中123就是你自定义的值,如果a为空,则a的值就为123。还有跟高级的用法:unwrap_or_else()。该方法可以定义函数:...
} else { return Err("NOT_AN_EVEN".to_string()); } } 注意:由于主要功能可以正常处理错误,因此打印 end of main 。 Error msg is NOT_AN_EVEN end of main unwrap()和Expect() 标准库包含两个枚举的辅助方法: unwrap() unwrap()函数返回操作成功的实际结果。如果操作失败,它将返回带有默认错误消息的...
letreport=get_weather(hometown).unwrap_or_else(|_err|vague_prediction(hometown)); (第 14 章会详细介绍闭包。) result.unwrap()(解包) 如果result是成功结果,那么此方法同样会返回成功值。但如果result是错误结果,则会引发 panic。此方法有其应用场景,后面会详细讨论。