如何更改不可变对象的值

qvsjd97n  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(303)
val factor = 3
val multiplier = (i:Int) => i * factor

如果我打电话 multiplier(3) 它会给我们一个输出 9 .
我想要的是

multiplier(3)
output =9
multiplier(3)
output=6

由于因子是不可变的,如何更改这类功能的乘数?

pgx2nnw8

pgx2nnw81#

不能更改不可变对象的值。这就是英语单词“不变”的字面意思:不变。函数式编程的要点是,你从不改变对象,只返回新的对象。

k7fdbhmy

k7fdbhmy2#

不知道这是不是个好主意

val factor = 3

// all this Wrap stuff is so that we don't have an implicit Int
class Wrap(var inner: Int)
implicit val tmp = new Wrap(factor + 1)
def multiplier(i: Int)(implicit w: Wrap) = { w.inner -= 1; w.inner * i }

和替代品 w.inner -= 1 如果你需要的话,也可以使用其他功能。或者没有暗示

class Wrap(var inner: Int)
var tmp = new Wrap(factor + 1)

def base(i: Int)(w: Wrap) = { w.inner -= 1; i * w.inner }
def multiplier(i: Int) = base(i)(tmp)

两者都有

multiplier(3)  // 9
multiplier(3)  // 6
multiplier(3)  // 3

这两种方法都需要创建一个变量。你看不出还有什么方法可以做到这一点而不会变得复杂。

相关问题