Ответ 1
Это известная ошибка: SI-3772: сопутствующие и связанные с методом классы классов случаев. Это частично исправлено, но проблема OP все еще остается. Проголосуйте, если вы хотите, чтобы это было исправлено.
В Scala 2.9.1 я получаю следующее поведение:
class Foo {
case class X()
object X // this compiles
def bar() {
object Y // this compiles
case class Y()
case class Z()
object Z // won't compile (see below)
}
}
Компилятор жалуется на Object Z
: ошибка: Z уже определен как (сгенерированный компилятором) объект класса класса класса Z
Похоже, что недопустимо определять объект-компаньон для класса case после определения класса case, если они находятся в определении функции. Является ли это ошибкой компилятора или преднамеренным? Если последнее, почему?
Это известная ошибка: SI-3772: сопутствующие и связанные с методом классы классов случаев. Это частично исправлено, но проблема OP все еще остается. Проголосуйте, если вы хотите, чтобы это было исправлено.
Причина, по которой первая разрешена, а вторая - не то, что классы и объекты могут иметь форвардные определения, но определения не могут. Итак, почему компилятор может смешивать object X
с тем, который определяется классом case, это невозможно сделать во втором случае.
Интересно, что происходит в случае Y
: shadowing или объект-компаньон вообще не генерируются?