/ /スカララップケースクラスコピーメソッド - スカラー、コピー、ケースクラス

スカララップケースクラスのコピーメソッド - スカラー、コピー、ケースクラス

ケースクラスのコピーをラップすることは可能ですか?メソッドのような、以下のような私がしたい場所 常に手動で定義することなく、ケースクラスをコピーするときにタイムスタンプを設定する ラッピングメソッドのすべてのパラメータ?

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をケースクラスに入れるのは一般的に安全ですか?それらは安定した不変のオブジェクトですか?

回答:

回答№1は1

私は2つのステップでそれをやります。その場合、より良い名前は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)

回答№2の場合は0

copy コードが生成されます。短い答えはいいえです

ただし、 Stamped 仕事をするケースクラス:

case class Stamped[T](data:T, asOf: Long = System.currentTimeMillis)

(あなたも書く必要はありません val ケースクラスのコンストラクタパラメータ val自動的に作成されます)。

P.S.私の知る限りでは ActorRef 不変です。また、 ActorPath