Это не очевидно, и это комбинация синтаксиса быстрого доступа Scala и индексации списка.Если вам нужна подсказка, попробуйте переопределить b
на:
def b(x : String) = 0
. Вы получите еще один мусор компилятора, но ошибка изменится.Короче говоря, компилятор Scala позволит вам опустить парены и точки для методов с нулевым или однопараметрическим методом, и мы знаем, b
похоже, что он каким-то образом связывается. Проблема в том, что Scala также использует парены для индексации списка, поэтому toList
, который возвращает итератор, может принять один параметр в качестве индекса списка.Я не совсем уверен в этой части, но похоже, что, как только вы начнете пропускать точки, лексер станет жадным, и когда он встретит метод, который может принимать один параметр, попытается передать ему следующую инструкцию.В данном случае это строка, поэтому она выдает синтаксическую ошибку.