scala – 功能编程设置器
发布时间:2020-12-16 10:06:24 所属栏目:安全 来源:网络整理
导读:我怎么能在这样的函数式编程中做一个setter?我想尊重不变性和其他函数式编程原理. private int age;public void setAge(int age){this.age=age;} 那可能吗?如果没有,我如何用函数式编程语言表示程序的状态(及其变化)? 解决方法 通常,您应该创建一个新状态
我怎么能在这样的函数式编程中做一个setter?我想尊重不变性和其他函数式编程原理.
private int age; public void setAge(int age){ this.age=age; } 那可能吗?如果没有,我如何用函数式编程语言表示程序的状态(及其变化)? 解决方法
通常,您应该创建一个新状态而不是修改旧状态.
复制 您可以使用这样的复制方法: case class Person(name: String,age: Int) val youngBob = Person("Bob",15) val bob = youngBob.copy(age = youngBob.age + 1) // Person(Bob,16) 斯卡拉兹镜头 你也可以使用镜头: import scalaz._,Scalaz._ val ageLens = Lens.lensu[Person,Int]( (p,a) => p.copy(age = a),_.age ) val bob = ageLens.mod(_ + 1,youngBob) // Person(Bob,16) 请参阅Learning scalaz/Lens.还有Lens的其他实现. 无形镜头 例如,您可以使用使用宏实现的无形镜头,因此您不必手动创建镜头: import shapeless._ val ageLens = Lens[Person] >> 1 val bob = ageLens.modify(youngBob)(_ + 1) // Person(Bob,16) 见examples on github. 也可以看看 有许多镜头实现.见Boilerplate-free Functional Lenses for Scala和Macrocosm. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |