Scala: порядок определения сопутствующего объекта в сравнении с классом case - PullRequest
17 голосов
/ 21 декабря 2011

В 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, если они находятся в определении функции. Это ошибка компилятора или намеренная? Если последнее, то почему?

Ответы [ 2 ]

13 голосов
/ 21 декабря 2011

Это известная ошибка: SI-3772: сопутствующие и принадлежащие методу классы дел . Это частично исправлено, но проблема ОП все еще остается. Проголосуйте, если хотите исправить.

1 голос
/ 21 декабря 2011

Причина, по которой первое разрешено, а второе - нет, состоит в том, что классы и объекты могут иметь прямые определения, но определения не могут. Так почему компилятор может смешивать object X с тем, который определен классом case, во втором случае это невозможно сделать.

Интересно, что происходит в случае Y: затенение или объект-компаньон вообще не генерируется?

...