Скала для нечувствительного Глава 15 Упражнение 10: Добавить assert(n >= 0
в метод factorial
. Скомпилируйте с утверждениями и убедитесь, что factorial(-1)
выдает исключение. Скомпилируйте без утверждений. Что происходит? Используйте javap
, чтобы проверить, что произошло с вызовом подтверждения.Разница в 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
...