20

在 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

看起来好像不允许在案例类定义之后为案例类定义伴随对象,如果它们在函数定义中。这是编译器错误还是故意的?如果是后者,为什么?

4

2 回答 2

14

这是一个已知的错误:SI-3772:同伴和方法拥有的案例类。这已部分修复,但 OP 的问题仍然存在。如果您想修复它,请投票。

于 2011-12-21T14:35:31.833 回答
1

允许第一个而不允许第二个的原因是类和对象可以具有前向定义,但定义不能。那么为什么编译器可以object X和case类定义的那一种混合,在第二种情况下是不可能的。

我想知道在这种Y情况下会发生什么:阴影或对象伴侣根本没有生成?

于 2011-12-21T15:10:10.693 回答