gpt4 book ai didi

scala - 添加到不可变的 HashSet

转载 作者:行者123 更新时间:2023-12-02 06:16:22 25 4
gpt4 key购买 nike

抱歉,我最近在第 685 页的“Programming in Scala”,第 2 版中看到了一个例子,这对我来说似乎很奇怪:

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 页面中定义。谁能帮我理解发生了什么事?

谢谢。

最佳答案

您没有添加到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com