使用另一个属性的值修改 Monocle Lenses 的属性
Modifying an attribute with Monocle Lenses using the value of another attribute
我有以下型号
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 和 totalValueCount 的 value 属性投票.
到目前为止我所做的是:
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)
但这样我只能访问我在修改步骤中更新的元素的 percentage 属性,我还需要该值。
我假设我需要使用 Traversable 来进行这种修改,但不确定如何进行。
谢谢
我不认为你可以用一个镜头来表达这一点,但是 .modify
中的一个单独的镜头效果很好:
Poll._pollChoices.composeTraversal(each).modify { choice =>
PollChoice._percentage.set(choice.value / poll.totalVoteCount)(choice)
}(poll)
我有以下型号
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 和 totalValueCount 的 value 属性投票.
到目前为止我所做的是:
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)
但这样我只能访问我在修改步骤中更新的元素的 percentage 属性,我还需要该值。
我假设我需要使用 Traversable 来进行这种修改,但不确定如何进行。 谢谢
我不认为你可以用一个镜头来表达这一点,但是 .modify
中的一个单独的镜头效果很好:
Poll._pollChoices.composeTraversal(each).modify { choice =>
PollChoice._percentage.set(choice.value / poll.totalVoteCount)(choice)
}(poll)