如何在不获取Int::MAX + 1
的情况下添加OverflowException
?我知道我可以做到
def add_unsafe(a : Int, b : Int) : Int
(a.to_i128 + b.to_i128).to_i
end
但是还有其他选择吗?
您正在寻找包装操作符。大多数数学运算符都有一个以&
开头的换行变体。因此,在您的情况下,应为a &+ b
。
顺便说一句。您的示例不起作用,因为to_i
仍会执行溢出检查。因此,调用add_unsafe(Int32::MAX, 1)
会引发错误。包装行为的更准确表示为(a.to_i128 + b.to_i128) % Int32::MAX
。 [&+
运算符显然更好。