Scala のコマンド ライン REPL を使用する:
def foo(x: Int): Unit = {}
def foo(x: String): Unit = {println(foo(2))}
与える
error: type mismatch;
found: Int(2)
required: String
REPL でオーバーロードされた再帰メソッドを定義できないようです。これは Scala REPL のバグだと思って提出しましたが、ほとんど即座に「wontfix: この 2 つのメソッドをコンパイルする必要があるため、インタープリターのセマンティクスを考えると、これをサポートできる方法がわかりません」で閉じられました。一緒。" 彼は、メソッドを囲んでいるオブジェクトに入れることを勧めました。
その理由を説明できる JVM 言語の実装または Scala の専門家はいますか? たとえば、メソッドが互いに呼び出されると問題になることがわかりますが、この場合はどうなりますか?
または、これが大きすぎる質問で、前提知識がもっと必要だと思われる場合は、言語の実装、特に JVM に関する書籍やサイトへの適切なリンクを誰か教えてください。(John Rose のブログと本 Programming Language Pragmatics については知っていますが、それだけです。:)