[解決済み】Scalaでケースクラスのインスタンスをクローンして、1つのフィールドだけを変更するにはどうすればよいですか?
2022-04-07 11:22:47
質問
例えば、異なるソーシャルネットワーク上の人々であるペルソナを表すケースクラスがあるとします。そのクラスのインスタンスは完全にイミュータブルで、イミュータブルコレクションに保持され、最終的には Akka アクターによって変更されます。
さて、多くのフィールドを持つケースクラスがあり、その中の1つのフィールドを更新しなければならないというメッセージを受け取りました。
case class Persona(serviceName : String,
serviceId : String,
sentMessages : Set[String])
// Somewhere deep in an actor
val newPersona = Persona(existingPersona.serviceName,
existingPersona.serviceId,
existingPersona.sentMessages + newMessage)
1つしか変更されないのに、すべてのフィールドを指定しなければならないことに注意してください。既存のPersonaを複製して、変更されないフィールドをすべて指定せずに、1つのフィールドだけを置き換える方法はありますか? これをtraitとして記述し、すべてのcaseクラスで使用することはできますか?
ペルソナがMapのようなインスタンスだったら、簡単にできそうですね。
どのように解決するのか?
case class
がついてきます。
copy
メソッドは、まさにこの使い方に特化したものです。
val newPersona = existingPersona.copy(sentMessages =
existingPersona.sentMessages + newMessage)
関連
-
[解決済み] scalaのforeachループ
-
[解決済み] MapのmapValuesとtransformの違いについて
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】case objectとobjectの違いについて
-
[解決済み】ScalaでVectorを選択するのはどんなとき?
-
[解決済み】Scalaで変数をキャストする方法は?
-
[解決済み】レイジーバルって何するもの?
-
[解決済み] sbtのScalaTest:タグなしで単一のテストを実行する方法はありますか?
-
[解決済み] 2つのマップをマージし、同じキーの値を合計するための最良の方法?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NoClassDefFoundError: org/apache/hadoop/fs/StreamCapabilities (s3データをsparkで読み込む際に発生します。
-
[解決済み] sbtのlibraryDependenciesで言うところの++=と+=の違いは何ですか?
-
[解決済み] データフレームを複数回グループ化する
-
[解決済み] ScalaのバージョンをScala本体から取得するにはどうしたらいいですか?
-
[解決済み] Scalaでファイル全体を読む?
-
[解決済み】Scala 2.8のコレクション・ライブラリは「歴史上最も長い遺書」のケースか?[クローズド] Scala
-
[解決済み】Scala 2.8 breakOut
-
[解決済み] マクロから匿名クラスのメソッドを持つ構造型を取得する
-
[解決済み] Scalaのパターンマッチングシステムで比較演算子を使う
-
[解決済み] データセットにカスタムオブジェクトを格納する方法は?