加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读