Scala中的case类重载

Scala中的case类重载,scala,constructor-overloading,Scala,Constructor Overloading,我的系统中有一条旧消息,我希望能够将其映射到系统中的新版本消息 为什么我的案例课不能超负荷 case class Message(a:Int, b:Int) case class NewMessage(a:Int, b:Int, c:Int) { def this(msg : Message) = this(a = msg.a, b = msg.b, c = 0) } val msg = Message(1,2) val converted = NewMessage(msg) 此代码似乎无

我的系统中有一条旧消息,我希望能够将其映射到系统中的新版本消息

为什么我的案例课不能超负荷

case class Message(a:Int, b:Int)
case class NewMessage(a:Int, b:Int, c:Int) {
  def this(msg : Message) = this(a = msg.a, b = msg.b, c = 0)
}
val msg = Message(1,2)
val converted = NewMessage(msg)

此代码似乎无法编译:(

必须使用
new
运算符显式调用构造函数:

val converted = new NewMessage(msg)
它之所以有效,是因为您实际上是在
NewMessage
中定义了第二个构造函数,而普通:

NewMessage(1, 2, 3)
翻译为:

NewMessage.apply(1, 2, 3)

您正在重载构造函数,而您要做的是重载apply方法。您可以在伴随对象上执行此操作:

case class NewMessage(a: Int, b: Int, c: Int) 

object NewMessage {
  def apply(msg: Message) = new NewMessage(a = msg.a, b = msg.b, c = 0)
}

val converted = NewMessage(msg)

@特伦斯:嗯……是的。我刚刚用Scala 2.9.1检查了它,代码通过添加
new
操作符进行编译。请说明您添加了
new
。我花了几分钟时间试图找出op的不同之处。@ziggystar:添加,谢谢。请注意,您被允许(并鼓励)在上面修改任何帖子。