【发布时间】:2012-06-15 11:23:50
【问题描述】:
在 Odersky 等人的 Scala 书中,他们说使用列表。我没有读完这本书的封面,但所有的例子似乎都使用了 val List。据我了解,还鼓励使用 vals 而不是 vars。但在大多数应用程序中,使用 var List 或 val MutableList 之间没有权衡吗?显然,我们尽可能使用 val List。 但是使用大量的 var 列表(或 var 向量等)是一种好习惯吗?
我对来自 C# 的 Scala 还是很陌生。我有很多:
public List<T> myList {get; private set;}
如果 C# 内置了不可变性,则很容易声明为 val 的集合,因为集合本身在构造后从未更改,即使在其生命周期中会从集合中添加和减去元素。因此,声明一个 var 集合几乎感觉像是离不变性迈出了一步。
针对答案和 cmets,Scala 的一大卖点是:它可以带来很多好处,而无需像 Lisp 或 Haskell 那样完全改变编写代码的方式。
【问题讨论】:
-
不使用可变列表有什么好处?我可以看到您如何获得线程安全,但您会失去什么?
-
@DonStewart,您可能会不小心将集合变量设置为错误的值。尽管不是一成不变的,但 C# 文化似乎更加强调私有性,这减少了这种类型的运行时错误。但是对于消费者来说,val 总是比 var 更可取,当然所有事情都是平等的。
-
@RichOliver 我相信@DonStewart 的意思是不使用可变列表和不同时使用
vars。 -
@ErikAllik 我的问题不是重复的,因为它首先被问到了。另一个问题可能与我的重复。
标签: scala collections immutability