gpt4 book ai didi

scala - 使用另一个属性的值修改带有 Monocle 镜头的属性

转载 作者:行者123 更新时间:2023-12-04 08:41:30 25 4
gpt4 key购买 nike

我有以下型号

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 的民意调查。

到目前为止我所做的是:
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)

关于scala - 使用另一个属性的值修改带有 Monocle 镜头的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41123429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com