scala – 使用另一个属性的值修改Monocle Lenses的属性
发布时间:2020-12-16 08:51:25 所属栏目:安全 来源:网络整理
导读:我有以下型号 import monocle.macros.Lensesimport 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:
我有以下型号
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进行这种修改,但我不确定如何. 解决方法
我不认为你可以在单个镜头中表达这一点,但在.modify中单独的镜头效果很好:
Poll._pollChoices.composeTraversal(each).modify { choice => PollChoice._percentage.set(choice.value / poll.totalVoteCount)(choice) }(poll) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |