Почему пробел в параметрах конструктора обратной кавычки нарушает работу компилятора?

Определенная комбинация пробелов и упорядочения вместе с обратными кавычками в именах параметров, где имя с обратной кавычкой имеет те же начальные символы, что и другой параметр, кажется, вводит компилятор в заблуждение, вызывая ошибки компиляции:

Декларация

case class A(`abc def`: List[Int], abc: String)

приводит к

[info] Compiling 7 Scala sources to ...
[error] (test:compileIncremental) scala.reflect.internal.Types$TypeError: type mismatch;
[error]  found   : List
[error]  required: String
[error] Total time: 2 s, completed Feb 10, 2016 11:09:51 AM

Эта проблема, похоже, зависит от порядка и типа параметров, а также от типа объявления, потому что все следующее компилируется просто отлично:

case class A(abc: String, `abc def`: List[Int])
case class B(`abc def`: String, abc: String)
case class C(`bbc def`: List[Int], abc: String)
def x(`abc def`: List[Int], abc: String) = 42

Это баг или как-то ожидаемо?

Скала 2.11.7


person kostja    schedule 10.02.2016    source источник


Ответы (1)


Да, это известная ошибка: SI-8831 — классы case демонстрируют странное поведение, зависящее от порядка. когда участники указаны в кавычках

person Ben    schedule 10.02.2016
comment
Точно. Кажется, здесь дело обстоит именно так. Спасибо за разъяснение, Бен - person kostja; 10.02.2016