せっかちな人のための 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
て同じコマンドで検査しました - 2 つの違いを見つけることができないようです。
プログラムを実行しようとすると、アサーションを使用してコンパイルすると例外がスローされ、アサーションを使用せずにコンパイルするとスタックオーバーフローエラーが発生することは理解していますが、違いがわかりませんjavap
...