设计具有不变性(在Scala中)
发布时间:2020-12-16 18:41:30 所属栏目:安全 来源:网络整理
导读:由于强调 Scala等编程语言的不变性(避免使用“var”),我的对象中的“状态修改方法”是否必须返回实例的副本(具有新状态)? 我们来考虑龟.我想像这样移动我的乌龟: val turtle = new Turtle(0,"north")val turtle2 = turtle.turnLeft().forward(5).turnRight
由于强调
Scala等编程语言的不变性(避免使用“var”),我的对象中的“状态修改方法”是否必须返回实例的副本(具有新状态)?
我们来考虑龟.我想像这样移动我的乌龟: val turtle = new Turtle(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" }) } 这是一种正确的设计方法吗? 如果是,那么(在每个方法调用上创建新对象)效率/效率如何? 提前致谢, 解决方法
创建大量短暂的物体是scala的标志性特征.它通常不是很昂贵,只要你在具有足够大小的堆的JVM上运行它,具有足够的年轻代内存以容纳所有的流失.
话虽如此,不变性不是宗教.常识应占上风,并指导设计决策,坚持“范式”变得过于沉重. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |