微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

可以使用可变类型的val时为什么要使用var?

如何解决可以使用可变类型的val时为什么要使用var?

我在许多akka例子中都注意到了,以显示如何在他们使用的Actor中使用可变类型:

var users: Map[String,String] = ...

人们为什么不使用:

val users = scala.collection.mutable.Map[String,String]()

您仍然可以对地图进行突变,但不能更改参考。

两种方法之间有显着差异吗?

解决方法

在一般情况下,如注释中所述,存在有关此数据可见性的问题。但是这些不适用于Actor,因为访问数据的唯一方法是通过发送给Actor的消息。 Actor状态对于Actor外部的代码不直接可见,因此无需担心共享可变数据。

使用var与使用mutable之间的主要区别在于,使用var替换了整个集合,而使用mutable替换了该集合。在适当位置更新集合不能正常工作,因此mutable版本倾向于鼓励使用非功能性代码,而var版本则鼓励使用更具功能性的编程风格。

但是Actor状态实际上应该保存在Behavior中(对于键入的Actor),或者在经典Actor中通过context.become进行管理。在这两种情况下,状态都由不可变的值组成,因此,var模型比使用mutable集合更接近于此。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。