① 收到参数
s: &str函数先拿到调用者给的文本。
等待RUST 函数 · 错误传播
它更像函数出口旁的一名分流员:遇到 Ok 就拆箱放行,遇到 Err 就立刻把错误送回调用者,后面的代码不再执行。
fn parse_and_half(s: &str) -> Result<i32, String> {
let n: i32 = s.parse()
.map_err(|_| "无法解析整数".to_string())?;
if n % 2 != 0 { return Err("不是偶数".into()); }
Ok(n / 2)
}
s: &str函数先拿到调用者给的文本。
等待Result<i32, _>成功就从 Ok 里取出整数;失败则立即返回 Err。
等待n % 2 == 0这是业务规则,与解析是否成功是两回事。
等待Ok(n / 2)只有前两道关都通过,才会走到这里。
等待按“开始”后,每次前进一步;留意哪一段代码没有机会执行。
要记住的契约:包含 ? 的表达式产生成功值,或者让整个函数提前返回。它不会把错误吞掉,也不会偷偷给你一个默认值。