私は次のモデルを持っています
import monocle.macros.Lenses
import monocle.function.all._
import monocle.std.list._
@Lenses("_") case class Poll(pollChoices: List[PollChoice], totalVoteCount: Int)
@Lenses("_") case class PollChoice(id: Int, value: Int, percentage: Int)
私が達成しようとしているのは、pollChoices リスト内の各要素のすべてのパーセンテージ属性を更新することによって、Poll の pollChoices 属性を更新することです。私の問題は、新しいパーセンテージ値が PollChoice のvalue 属性と Poll の totalValueCountに基づいていることです。
私がこれまでに行ったことは次のとおりです。
val poll = Poll(List(PollChoice(1,3,0), PollChoice(2,5,0)), 8)
(Poll._pollChoices composeTraversal each composeLens PollChoice._percentage)
.modify(oldPercentage => oldPercentage + 1)(poll)
しかし、この方法では、変更ステップで更新している要素のパーセンテージ属性にしかアクセスできません。値も必要です。
この種の変更を行うには Traversable を使用する必要があると思いますが、方法がわかりません。ありがとう。