提问人:Shubham Goyal 提问时间:2/20/2019 最后编辑:MatShubham Goyal 更新时间:2/20/2019 访问量:757
如何更改不可变对象的值
How to change value of immutable object
问:
val factor = 3
val multiplier = (i:Int) => i * factor
如果我调用它将给我们一个输出.multiplier(3)
9
我想要的是
multiplier(3)
output =9
multiplier(3)
output=6
如何更改此类功能的乘数,因为因子是不可变的?
答:
3赞
Jörg W Mittag
2/20/2019
#1
不能更改不可变对象的值。这就是英语单词“immutable”的字面意思:不可改变。函数式编程的全部意义在于,你永远不会改变对象,你只返回新的对象。
-1赞
joel
2/20/2019
#2
不知道这是否是一个好主意
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
这两种方式都需要创建一个 var。看不出你还能在不变得复杂的情况下做到这一点。
评论
1赞
joel
2/20/2019
我很想知道其中的哪一部分得到了反对票以及为什么
评论
multiplier
*3
*2