Почему пробел в параметрах конструктора backtick нарушает компилятор?
Определенная комбинация пробелов и упорядочения вместе с обратными галочками в именах параметров, где имя с обратным символом имеет те же начальные символы, что и другой параметр, кажется, вводит компилятор в заблуждение, вызывая ошибки компиляции:
Декларация
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
Это ошибка или как-то ожидается?
Scala 2.11.7
1 ответ
Решение
Да, это известная ошибка: SI-8831 - Классы Case проявляют странное, зависящее от порядка поведение, когда члены заключаются в кавычки