在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
如果在案例类定义之后,如果它们在函数定义中,则不允许为案例类定义伴随对象。这是编译器错误还是故意的?如果是后者,为什么?
答案 0 :(得分:13)
这是一个已知错误:SI-3772: companions and method-owned case classes。这部分是固定的,但OP的问题仍然存在。如果您想要修复它,请投票。
答案 1 :(得分:1)
允许第一个而第二个不允许的原因是类和对象可以有前向定义,但定义不能。那么为什么编译器可以将object X
与case类定义的那个混合,在第二种情况下不可能这样做。
我想知道在Y
情况下会发生什么:阴影或对象伴侣根本没有生成?