Использования Scala в командной строке РЕПЛА:Рекурсивная перегрузочная семантика в Scala РЕПЛ - языки JVM
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? (Я знаю о блоге Джона Роуза и книге «Прагматика языка программирования» ... но это все. :)
Отличный ответ Даниил, спасибо. Кроме того, мне нравится ваш блог. :) – 2008-09-23 18:27:29