抱歉,我最近在第685页的第二版“Scala中编程”中看到一个示例,这对我来说很奇怪:

var hashSet: Set[C] = new collection.immutable.HashSet
hashSet += elem1

如何添加不可变的集合?我尝试过REPL,但效果很好!
> scala
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_11).
Type in expressions to have them evaluated.
Type :help for more information.

scala> var s : Set[Int] = collection.immutable.HashSet()
s: Set[Int] = Set()

scala> s += 1324

scala> println(s)
Set(1324)

奇怪的事实是,在immutable.HashSet api页面中 undefined + =运算符。有人可以帮我了解发生了什么吗?

谢谢。

最佳答案

您没有添加到HashSet。您正在分配给hashSet,这非常好,因为hashSetvar,而不是val

Section 6.12.4 Assignment Operators of the Scala Language Specification (SLS)解释了如何对此类复合赋值运算符进行除杂:

l ω= r

(其中ω是除<>!之外的其他任何运算符字符序列,并且不以=开头)
l.ω=(r)

如果l具有或可以隐式转换为具有名为ω=的成员的对象。

否则,它会贬低
l = l.ω(r)

(除了l保证仅被评估一次),如果类型检查。

这使得+=之类的东西可以像其他语言一样工作,但是仍然被覆盖以做不同的事情。

关于scala - 添加到不可变的HashSet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29887496/

10-12 22:56