函数式编程的宗旨之一是使用纯函数。Pure函数是无副作用且参照透明的函数。
Getter并不是透明的-如果在两次Getter的调用之间调用了Setter,则即使Getter的参数没有(通常没有参数),它的返回值也会改变。
设置器会产生副作用-调用设置器通常会操纵不是其返回值的值(实际上,传统上,设置器不返回任何值)
我知道在Scala中,我们可以接受这样一个事实,即我们将两个范例(功能和面向对象)结合在一起,并像使用Java这样的语言时使用了getter / setter。
在像Haskell这样的语言(我不太会流利,但被告知对“纯”功能语言更真实)时,我很好奇,如何对对象的属性建模,以使Getters相对透明和Setters。有副作用吗?
解决方案是将调用设置器的对象的副本作为设置器的返回值传回,并且此副本包含对属性值的更改吗?