7. 错误处理:Result 与 ?
Dawn 没有异常。可恢复的错误走 Result[T, E];? 在 Ok/Some 时取值、
在 Err/None 时提前返回。不可恢复的用 panic(它不返回,故不需要 !io)。
fn half(x: Int) -> Result[Int, String] =
if x % 2 == 0 { Ok(x / 2) } else { Err("$x 是奇数") }
fn quarter(x: Int) -> Result[Int, String] = {
let h = half(x)?
half(h)
}
pub fn main() -> Unit !io =
match quarter(20) {
Ok(v) -> println("得到 $v")
Err(e) -> println("错误:$e")
}
在 Playground 打开
得到 5