是否可以包装案例类的复制方法,例如下面我想要的地方 始终在复制案例类时设置时间戳,而无需手动定义 包装方法的所有参数?
case class NodeUpdate(val ip: String,
val actor: Option[ActorRef] = None,
val status: Status = Offline,
val asOf: Long = System.currentTimeMillis) {
// Error type mismatch; found : Seq[Any] required: String
def stampedCopy(values: Any*) = copy(values, asOf = System.currentTimeMillis)
// This works but needs to be updated for each modification
// So I would prefer to use something like what I have above
def stampedCopy2(ip: String = ip, actor: Option[ActorRef] = actor, status: Status = status) =
copy(ip, actor, status, System.currentTimeMillis)
}
编辑:如果有人知道,请快速跟进 - 将Akka ActorRef放入案例类通常是否安全?它们是稳定的不可变对象吗?
答案 0 :(得分:1)
我会分两步完成。在这种情况下,更好的名称将类似于updateTime。
case class NodeUpdate(val ip: String,
val asOf: Long = System.currentTimeMillis) {
// Error type mismatch; found : Seq[Any] required: String
def stampedCopy() = copy(asOf = System.currentTimeMillis)
}
val update1 = NodeUpdate("ip") //> update1 : NodeUpdate(ip,1411585428244)
val update2 = update1.stampedCopy //> update2 : NodeUpdate(ip,14115 85428456)
val update3 = update1.copy(ip="ip3").stampedCopy//> update3 : NodeUpdate(ip3,1411585597836)
答案 1 :(得分:0)
copy
是生成的代码。所以简短的回答是否。
但是,您可以声明将执行此任务的Stamped
案例类:
case class Stamped[T](data:T, asOf: Long = System.currentTimeMillis)
(此外,您无需为案例类的构造函数参数编写val
。val
是自动创建的。)
P.S。据我所知ActorRef
是不可变的。您还可以考虑使用ActorPath