我用var
类型简单地使用了immutable.ListMap
变量。不幸的是,项目的代码复杂性并没有让我有机会将它移动到immutable val
在审查我得到一个评论,用var
将其更改为mutable.ListMap
变量。就像“你已经拥有var
而且可变不会让事情变得更糟。”
你觉得怎么样?是否存在禁止使用可变变量的性能指标或代码样式?在mutable var
和immutable var
之间选择什么真的更好?
我已经阅读了所有答案
val-mutable versus var-immutable in Scala并注意到一条有很多喜欢的评论:
优先于可变var的可变val上的不可变var的不可变val
该声明是否有任何证据或解释?
具有可变集合的var
是双重可变性。
var mm : scala.collection.mutable.xxx = ???
这意味着mm
集合可以并且可能随时间而变化和/或mm
本身可以更改为引用完全不同的集合。
偶尔,可变集合是有用的。很少需要可变变量,应该避免。可变变量键入可变集合?我只是不明白这是多么合理。
ListMap
实际上是一个很好的例子,因为在多线程环境中,即使你只看它,你也必须使用synchronize
。另一方面,var
任务是原子的,你根本不需要synchronize
,只需将其标记为@volatile
。
这是一个性能优势,以及可靠性(每当你的东西需要synchronized
访问时,有人忘记正确编码它只是时间问题)。
所以,是的,如果由于某种原因你不能使用“immutable val”,那么肯定更喜欢“immutable var”而不是“mutable val”,除非你有一个明确而具体的理由要求你的容器是可变的(例如,地图非常庞大且经常更新,导致可衡量的性能问题)。
至于“mutable var”,是的,就像提到的另一个答案一样,我也不知道为什么在世界上你想拥有它。