Scala:使用特征复制案例类

Joe*_*Joe 10 scala

我是Scala的新手,我有一个关于复制案例类的最佳方法的问题,同时保留来自特征的数据.例如,假设我有以下内容:

trait Auditing {

  var createTime: Timestamp = new Timestamp(System.currentTimeMillis)
}

case class User(val userName: String, val email: String) extends Auditing

val user = User("Joe", "joe@blah.com")
Run Code Online (Sandbox Code Playgroud)

然后我想创建一个更改了一个参数的新副本:

val user2 = user.copy(email = "joe@newemail.com")
Run Code Online (Sandbox Code Playgroud)

现在,在上面的示例中,属性createTime不会被复制,因为它未在User case类的构造函数中定义.所以我的问题是:假设将createTime移动到构造函数中不是一个选项,获取包含特征值的User对象副本的最佳方法是什么?

我正在使用Scala 2.9.1

提前致谢!乔

小智 6

您可以使用该行为覆盖复制方法.

case class User(val userName: String, val email: String) extends Auditing
{
  def copy(userName = this.userName, email = this.email) {
   val copiedUser = User(userName, email)
   copiedUser.createTime = createTime
   copiedUser      
  }
}
Run Code Online (Sandbox Code Playgroud)