如何在 Crystal 中进行不安全的加法(不抛出 OverflowException 的加法)?

How to do an unsafe addition (addition without throwing OverflowException) in Crystal?

如何添加 Int::MAX + 1 而没有得到 OverflowException?我知道我能做到

def add_unsafe(a : Int, b : Int) : Int
    ((a.to_i128 + b.to_i128) % Int32::MAX).to_i
end

但是有没有其他方法可以做到这一点?

您正在寻找包装运算符。大多数数学运算符都有一个以 & 为前缀的包装变体。所以在你的情况下,那将是 a &+ b.

顺便说一句。您的示例不起作用,因为 to_i 仍然进行溢出检查。所以调用 add_unsafe(Int32::MAX, 1) 会引发错误。 更准确的包装行为表示是 (a.to_i128 + b.to_i128) % Int32::MAX。不过,&+ 运算符显然更好。