Scala中的一个简单阶乘函数对于太大的整数返回零。我应该不会出错?要使编译器/解释器发现此类问题该怎么办?
使用BigInt可以处理大量数字,但不能解决错误消息丢失的问题。
scala> :paste
// Entering paste mode (ctrl-D to finish)
def factorial(n: Int): Int = {
def go(n: Int, acc: Int): Int =
if (n <= 0) acc
else go(n-1, n*acc)
go(n, 1)
}
// Exiting paste mode, now interpreting.
factorial: (n: Int)Int
scala> factorial(34)
res8: Int = 0
这就是我所期望的:
scala> val x = 1
x: Int = 1
scala> x + 9999999999999999999
<console>:1: error: integer number too large
x + 9999999999999999999
^