2012-06-04 112 views
4

我在我的系统中有一条遗留信息,我希望能够在我的系统中映射它的新版本信息。斯卡拉案例类重载

为什么我不能重载我的case类?

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) 

此代码似乎没有编译。 :(

回答

5

必须明确使用new操作者调用构造:

val converted = new NewMessage(msg) 

它的工作原理,因为你实际上是在NewMessage界定第二构造而普通:

NewMessage(1, 2, 3) 

被翻译成:

NewMessage.apply(1, 2, 3) 
+0

确定吗?它说它无法解析构造函数。 – Terenced

+1

@Terenced:恩......是的。我刚刚使用Scala 2.9.1进行了检查,并且通过添加'new'运算符来编译代码就好了 –

+0

这工作正常!谢谢! :D – Terenced

11

您正在重载构造函数,而你想要做的是重载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)