fn auto_fix(e: u32) -> Result { Ok(e * e) }fn keep(e: u32) -> Result { Err(e) } // 用例1和2,由于 原始Result值非 错误,所以不受or_else影响 assert_eq!(Ok(2).or_else(auto_fix).or_else(auto_fix), Ok(2)); assert_eq!(Ok(2).or_else(keep).or_else(auto_fix), Ok...
fn sq(x: u32) -> Result { Ok(x * x) } fn err(x: u32) -> Result { Err(x) } assert_eq!(Ok(2).or_else(sq).or_else(sq), Ok(2)); assert_eq!(Ok(2).or_else(err).or_else(sq), Ok(2)); assert_eq!(Err(3).or_else(sq).or_else(err), Ok(9)); assert_eq!(Er...
本文简要介绍rust语言中 core::result::Result.unwrap_or_else 的用法。用法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...
fn main() { let result = safe_divide(10, 0).unwrap_or_else(|e| e); println!("{}", result); } 在这个例子中,safe_divide函数使用match表达式来处理divide函数可能返回的错误。 结论 Rust的Result和Option类型为错误处理和值的可选性提供了一种强大且表达力强的方式。通过显式地使用这些类型,Rust代...
let result = safe_divide(10, 0).unwrap_or_else(|e| e); println!("{}", result); } 在这个例子中,safe_divide函数使用match表达式来处理divide函数可能返回的错误。 结论 Rust的Result和Option类型为错误处理和值的可选性提供了一种强大且表达力强的方式。通过显式地使用这些类型,Rust代码更加健壮,错误...
Result与可恢复的错误 大部分错误并没有严重到需要程序完全停止执行。有时,一个函数会因为一个容易理解并做出反应的原因失败。例如,如果因为打开一个并不存在的文件而失败,此时我们可能想要创建这个文件,而不是终止进程。 回忆一下第 2 章href="https://api.ltpp.vip/Article/ch02-00-guessing-game-tutorial.html...
result.err()(错误值) 以Option<E>类型返回错误值(如果有的话)。 result.unwrap_or(fallback)(解包或回退值) 如果result为成功结果,就返回成功值;否则,返回fallback,丢弃错误值。 代码语言:javascript 代码运行次数:0 运行 AI代码解释 // 对南加州而言,这是一则十拿九稳的天气预报constTHE_USUAL:WeatherReport...
简而言之:当你希望无论未来是否成功都要执行某些操作时,使用then;当未来成功时才执行某个闭包时,使用and_then;当未来失败时才执行某个闭包时,使用or_else。 and_then和or_else直接对应于Result上同名方法。 你的第一步应该是阅读文档。文档包含了确切的方法签名(解释了它期望的类型和返回类型),每个方法的描述,以...
枚举类型对于Java程序员来说不会陌生,它是列举常量成员的非常好用的工具。在 rust 中也同样如此,并且在 rust 中,枚举类型比其他语言中更为常用,尤其是 Option、Result 等语言自身定义的枚举类型,为 rust 本身添加了非常强大而独特的语法特性。 2. 枚举类型 ...
最常见的疑问都是关于Result的,包括unwrap_or和and_then。此外,由于Result有第二个类型参数,因此存在一些处理错误类型的组合子,例如map_err(不是map) 和or_else(而不是and_then)。 Result 类型别名惯用法(TheResulttype alias idiom) 在标准库中,您可能经常看到Result<i32>这样的类型。但是等等,我们定义了Result有...