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}")
}
得到 5
另见:spec.md §8