gpt4 book ai didi

scala - 不变性设计(在 Scala 中)

转载 作者:行者123 更新时间:2023-12-04 17:18:37 25 4
gpt4 key购买 nike

随着 Scala 等编程语言对不变性的强调(避免“var”),这是否意味着我的对象中的“状态修改方法”必须返回实例的副本(具有新状态)?

让我们考虑乌龟。我想像这样移动我的乌龟:

val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)

这里的turtle2 不会指向Turtle 的同一个实例(它们是两个独立的实例)。事实上,在这一系列 Action 中,创建了 4 个临时对象。这就是我将如何实现方法 turnLeft,例如:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}

这是正确的设计方法吗?

如果是,那么效率/低效如何(在每次方法调用时创建新对象)?
如果不是,那什么是正确的?我对不变性方面(或者一般来说可能是函数式编程)的理解有什么错误/缺失?

提前致谢,
拉卡

最佳答案

创建大量的短期对象是 Scala 的一个标志性特征。它通常不会很昂贵,只要您在具有足够大小的堆的 JVM 上运行它,并有足够数量的年轻代内存来容纳所有的流失。

话虽如此,不变性不是一种宗教。常识应该占上风,并在坚持“范式”变得过于费力的情况下指导设计决策。

关于scala - 不变性设计(在 Scala 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27761429/

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