什么是更好的:var with mutable.ListMap或var with immutable.ListMap?

问题描述 投票:-2回答:2

我用var类型简单地使用了immutable.ListMap变量。不幸的是,项目的代码复杂性并没有让我有机会将它移动到immutable val

在审查我得到一个评论,用var将其更改为mutable.ListMap变量。就像“你已经拥有var而且可变不会让事情变得更糟。”

你觉得怎么样?是否存在禁止使用可变变量的性能指标或代码样式?在mutable varimmutable var之间选择什么真的更好?

我已经阅读了所有答案

val-mutable versus var-immutable in Scala并注意到一条有很多喜欢的评论:

优先于可变var的可变val上的不可变var的不可变val

该声明是否有任何证据或解释?

scala immutability var
2个回答
1
投票

具有可变集合的var是双重可变性。

var mm : scala.collection.mutable.xxx = ???

这意味着mm集合可以并且可能随时间而变化和/或mm本身可以更改为引用完全不同的集合。

偶尔,可变集合是有用的。很少需要可变变量,应该避免。可变变量键入可变集合?我只是不明白这是多么合理。


1
投票

ListMap实际上是一个很好的例子,因为在多线程环境中,即使你只看它,你也必须使用synchronize。另一方面,var任务是原子的,你根本不需要synchronize,只需将其标记为@volatile

这是一个性能优势,以及可靠性(每当你的东西需要synchronized访问时,有人忘记正确编码它只是时间问题)。

所以,是的,如果由于某种原因你不能使用“immutable val”,那么肯定更喜欢“immutable var”而不是“mutable val”,除非你有一个明确而具体的理由要求你的容器是可变的(例如,地图非常庞大且经常更新,导致可衡量的性能问题)。

至于“mutable var”,是的,就像提到的另一个答案一样,我也不知道为什么在世界上你想拥有它。

© www.soinside.com 2019 - 2024. All rights reserved.