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
...