Компилятор представления: завершение типа в вызове метода с более чем одним аргументом
Я загружаю исходный код в компилятор с помощью askReload, а затем пытаюсь вызвать askTypeCompletion. (Точка). Завершение в первом случае (метод с 2 аргументами) не работает, но завершение в вызове метода с одним аргументом работает как ожидалось.
val list = Seq(1,2)
def add(x: Int, y: Int): Int = x + y
def minusOne(x: Int) = x - 1
add(list.<completion is not working)
minusOne(list.<works fine>)
что интересно, если у меня есть код:
implicit class OptionW[T](opt: Option[T]) {
def cata[A](some: T => A, none: A) = opt.map(some) getOrElse none
}
Option("").cata(x => x.<not working>)
завершение после точки снова не работает, но если я набираю запятую после точки и затем пытаюсь снова завершить после точки, это работает: Option("").cata(x => x.<works!>,)
Это какая-то ошибка или ожидаемое поведение?
1 ответ
Я прототипировал изменение в компиляторе, чтобы быть более отказоустойчивым из-за пропущенных аргументов.
https://github.com/retronym/scala/commit/c1460f50945a161599d6d454da355ee20aa402b2
Вместо того, чтобы просто выручить с ошибкой "недостаточно аргументов", мы также можем выполнить типовую проверку данных аргументов, если мы разрешили один (не перегруженный) метод. Нам нужно проверить тип аргумента x => x....
использование типа параметра в качестве ожидаемого типа для вывода типа параметра лямбда и, в свою очередь, для предложения дополнений.
Я подал это в качестве улучшения: https://issues.scala-lang.org/browse/SI-8739