错误处理
!
语法用于表示函数可能引发错误。
你可以使用 try { ... } catch { ... }
语法来处理这种情况,或者使用 ?
语法将结果转换为 Result
,这是一个用于表示计算结果的类型。
///|
pub fn safe_add(i : Int, j : Int) -> Int! {
let signum_i = i & 0x80000000
let signum_j = j & 0x80000000
let result = i + j
if signum_i != signum_j {
result
} else {
let result_signum = result & 0x80000000
if result_signum != signum_i {
fail!("overflow")
} else {
result
}
}
}
///|
fn main {
let a = try {
safe_add!(1, 2)
} catch {
_ => panic()
}
try {
let result = safe_add!(@int.max_value, @int.max_value)
} catch {
Failure(error_message) => println(error_message)
_ => panic()
}
let result = safe_add?(@int.max_value, @int.max_value)
}