抱歉,我最近在第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
,这非常好,因为hashSet
是var
,而不是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/