加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

设计具有不变性(在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上运行它,具有足够的年轻代内存以容纳所有的流失.

话虽如此,不变性不是宗教.常识应占上风,并指导设计决策,坚持“范式”变得过于沉重.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读