我希望有一个Rust函数,允许将(,)类型加到(,)类型上,并检查溢出。
我的实现方式:
我有另一个类似的函数可以对和执行相同的操作。感觉在重复自己。这些函数的测试看起来也非常相似。
是否有一种方式可以重构我的代码,只使用一个函数?我不确定如何泛化和之间的关系(或者和,和)。
我的实现方式:
/// Add u32 to i32. In case of an overflow, return None.
fn checked_add_i32_u32(a: i32, b: u32) -> Option<i32> {
let b_half = (b / 2) as i32;
let b_rem = (b % 2) as i32;
Some(a.checked_add(b_half)?.checked_add(b_half)?
.checked_add(b_rem)?)
}
/// Add u64 to i64. In case of an overflow, return None.
fn checked_add_i64_u64(a: i64, b: u64) -> Option<i64> {
let b_half = (b / 2) as i64;
let b_rem = (b % 2) as i64;
Some(a.checked_add(b_half)?.checked_add(b_half)?
.checked_add(b_rem)?)
}
我有另一个类似的函数可以对和执行相同的操作。感觉在重复自己。这些函数的测试看起来也非常相似。
是否有一种方式可以重构我的代码,只使用一个函数?我不确定如何泛化和之间的关系(或者和,和)。
?
:a.checked_add(b_half)?.checked_add(b_half)?.checked_add(b_rem)
。 - Shepmaster