使用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”。他解释说:“考虑到编译器的语义,我看不出如何支持这个功能,因为这两个方法必须一起编译。”他建议将方法放入一个封闭对象中。
有没有JVM语言实现或Scala专家可以解释原因?我可以看到如果方法相互调用,这将是一个问题,但在这种情况下呢?
或者如果这个问题太大,你认为我需要更多的先决知识,是否有人有任何好的书籍或网站链接,特别是关于JVM上的语言实现(我知道John Rose的博客和《编程语言实践》这本书...但就只有这些了:)