在像Scala这样的编程语言中强调不可变性(避免使用“var”),这是否意味着我的对象中“修改状态的方法”必须返回实例的副本(带有新状态)?
让我们考虑海龟。我想像这样移动我的海龟:
让我们考虑海龟。我想像这样移动我的海龟:
val turtle = new Turtle(0, 0, "north")
val turtle2 = turtle.turnLeft().forward(5).turnRight().backward(2)
在这里,turtle2不会指向Turtle的同一个实例(它们是两个独立的实例)。实际上,在那个移动序列中,创建了4个临时对象。例如,这就是我如何实现turnLeft方法:
def turnLeft {
self.copy(orientation = self.orientation match {
case "north" => "west"
case "east" => "north"
case "south" => "east"
case "west" => "south"
})
}
这是正确的设计方法吗?
如果是,那么它有多么高效或低效(每次方法调用都创建新对象)?如果不是,什么是正确的方法?在我的不可变性方面的理解中出了什么问题/缺失了什么(或者可能是函数式编程一般)?
提前感谢, Raka