Scala:伴随对象与案例类的定义顺序

时间:2011-12-21 13:37:25

标签: scala definition case-class

在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

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

2 个答案:

答案 0 :(得分:13)

这是一个已知错误:SI-3772: companions and method-owned case classes。这部分是固定的,但OP的问题仍然存在。如果您想要修复它,请投票。

答案 1 :(得分:1)

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

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