データベース内の一部のデータを表す一連のオプションを備えた 3 レベルのネストされたケース クラス モデルがあります。それは本質的に次のとおりです。
case class User(settings: Option[Settings])
case class Settings(keys: Option[List[KeySet]])
case class KeySet(privateKey: String, publicKey: String)
いくつかの理解またはチェーンflatMap
(別の Option オブジェクト内の Scala Option オブジェクト) を使用して、これから深くネストされたフィールドを取得する方法を理解しています。また、レンズ ライブラリを使用してそれを更新する方法も理解していますが、ツリー内のいくつかのものがまだ存在しない場合でも、それらの s をNone
自動的に作成します。Some
たとえば、keys
リストに追加したいが、ユーザーがまだ何も設定していない場合はどうすればよいsettings
でしょうか? Some(settings)
ある意味で、フィールドとフィールドを自動的に作成することは可能Some(keys)
ですか?
多くのパターンマッチングでそれを行う方法についてのアイデアはありますが、これは、1. コードが右方向にずれていること、および 2.オプションを使用していない、map
またはほとんど使用していないため、間違っているようです。flatMap
これは、レンズ ライブラリを単独で使用することで可能ですか? 私はそれが不可能かもしれないことをここで読みました:https://github.com/julien-truffaut/Monocle/issues/215モノクルの場合のようにOption
、None
. 多分私は問題について別の方法で考える必要がありますか?
ありがとう