gpt4 book ai didi

scala - 在我的项目中放置 Scala 镜头的位置?

转载 作者:行者123 更新时间:2023-12-04 23:42:28 25 4
gpt4 key购买 nike

实际上,我一直坚持使用函数式编程代码风格和项目结构。在用 Java 编程时,我知道将所有逻辑放在哪里,但我不熟悉函数式风格。

实际上,我尝试使当前项目中的 Scala 类不可变。然后我想在将来使用 scalaz.Lens 和 scalaz.PLens 来更改我的对象(实际上是创建新对象)。

在所有 Lense 示例中,人们将代码放在一个对象中,它扩展了 App trait 以简单地展示它是如何工作的。但在现实生活中的例子应该是一些合适的地方来写那些镜头。

在 Java 中,所有的修改器和访问器都放在类本身中。但是对于镜头,我不知道在哪里写它们。

将不胜感激任何建议

最佳答案

通常,镜头固定在伴生物体中,例如

package package1

import monocle.Iso
import monocle.macros.Lenses

@Lenses
case class Name(first: String, last: String, mid: Option[String]) {
def fullName = s"$first ${mid.fold("")(_ + " ")}$last"
}

object Name {
val fullName = Iso[Name, String](_.fullName)(_.split(' ') match {
case Array() => Name("", "", None)
case Array(name) => Name(name, "", None)
case Array(first, last) => Name(first, last, None)
case Array(first, mid, last, _*) => Name(first, last, Some(mid))
})

}


package package2

import monocle.macros.Lenses
import package1._

@Lenses
case class User(name: Name, age: Int)

object User {
val fullName = name ^<-> Name.fullName
}

这里 @Lenses宏注释将自动为伴随对象中的简单字段放置镜头

关于scala - 在我的项目中放置 Scala 镜头的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33692718/

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