不耐烦的 Scala第 15 章练习 10:添加assert(n >= 0
到factorial
方法。在启用断言的情况下编译并验证是否factorial(-1)
引发异常。编译没有断言。发生什么了?用于javap
检查断言调用发生了什么。
我的代码:
object Test {
def factorial(x: Int): Int = {
assert(x >= 0, "Call to factorial must be >= 0!")
x match {
case 0 => 1
case x: Int => x * factorial(x - 1)
}
}
def main(args: Array[String]): Unit = {
factorial(-1)
}
}
我scalac
首先编译,使用检查javap Test
,然后再次编译scalac -Xelide-below MAXIMUM
并使用相同的命令检查 - 我似乎无法找到两者之间的区别。
我知道当我尝试执行程序时使用断言编译会抛出异常,而没有断言编译会导致堆栈溢出错误,但我找不到javap
...