带有WrappedArray参数的Scala案例类构造函数

hal*_*arp 1 scala scala-2.8 scala-2.9

我有以下场景:

sealed abstract class Type(val inUse: Boolean)

case class IntTy(override val inUse: Boolean) extends Type(inUse)

case class TupleTy(override val inUse: Boolean, elems: Type*) extends Type(inUse) {
  def this(elems: Type*) = this(false, elems:_*)
}
Run Code Online (Sandbox Code Playgroud)

在Scala 2.8.0中这很好用,我可以创建一个新的TupleTy实例:

TupleTy(IntTy(false))
Run Code Online (Sandbox Code Playgroud)

但是,我刚刚更新到Scala 2.9.1 final,它不再有效.我现在收到以下错误:

error: type mismatch;
found   : IntTy
required: Boolean
              TupleTy(IntTy(false))
                           ^
Run Code Online (Sandbox Code Playgroud)

这是一个错误还是我错过了某些东西?

agi*_*eel 5

我不确定它是否适用于2.8.0.

您已定义了其他构造函数,但未定义其他工厂方法.

new TupleTy(IntTy(false)) // works as expected
Run Code Online (Sandbox Code Playgroud)

编辑

这是一个可能的解决方法

case class TupleTy(override val inUse: Boolean = false)(elems: Type*) extends Type(inUse)
Run Code Online (Sandbox Code Playgroud)

现在你可以做这样丑陋的事情,但你不应该这样做.不,不,你不应该.

TupleTy()(IntTy(false))
Run Code Online (Sandbox Code Playgroud)