如何在Crystal中进行不安全的加法(在不引发OverflowException的情况下进行加法?

问题描述 投票:0回答:1

如何在不获取Int::MAX + 1的情况下添加OverflowException?我知道我可以做到

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

但是还有其他选择吗?

crystal-lang
1个回答
0
投票

您正在寻找包装操作符。大多数数学运算符都有一个以&开头的换行变体。因此,在您的情况下,应为a &+ b

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

© www.soinside.com 2019 - 2024. All rights reserved.