アノテーションで指示していない関数の 1 つに末尾再帰を適用すると、コンパイラに警告してもらいたいです。これは可能ですか?
動機:私は論理エラーの問題として無限ループを書くことはめったにありませんが、タイプミスをしてしまいました (はい、可能です)。通常、再帰的な無限ループは、スタック オーバーフロー例外の何が問題なのかを教えてくれるだけですが、テールを再帰的にコンパイルした場合は、ハングするだけです。
デフォルトのパラメーターを持つケースクラスと組み合わせてキーワードを忘れることnew
は、私がばかげて2回つまずいた良い例です:
case class A(a: Int, b: Int = 1)
object A {
def apply(a: Int): A = A(a)
SO なしで無限ループを引き起こしますが、そうでdef apply(a: Int): A = new A(a)
はありません。