scala - "+="会不会重新分配?

标签 scala

请看下面的代码:

val names = Set("Mike", "Jack")
names += "Jeff"

会报错:

error: reassignment to val 

我看到有些书上说+=其实是一个方法,代码可以是:

val names = Set("Mike", "Jack")
names.+=("Jeff")

如果 += 是一个方法,为什么它会分配“名称”?

最佳答案

scala.collection.mutable.Set 有 += 方法。因此,无论是 val 还是 var,您都只是在基础集合上调用一个方法。但是 scala.collection.immutable.Set 没有 += 方法但是有 + 方法。 += 在 Scala 中有特殊含义;它可以像这样应用,names = names + "Jeff",因为这是对 val 'names' 的重新分配,所以编译器会报告错误。

示例(应用 + 并在 += 的位置完成重新分配)

class Test(num: Int) {
def +(n: Int) = new Test(num + n);
override def toString = num.toString
}

defined class Test

val foo = new Test(5)

foo: Test = 5

foo += 4

error: reassignment to val
       foo += 4
           ^

var bar = new Test(5)

bar: Test = 5

bar += 4

bar

res12: Test = 9

关于scala - "+="会不会重新分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3350087/

相关文章:

json - 将 JSArray 对象解析为 Scala Play 中的对象列表

scala - 安装 Scala 2.9 每晚构建

java - 无法让 KafkaProducer/KafkaConsumer 在 Scala 中工作

scala - 测试kafka和flink集成流程

java - Scala 的 future 到 Java Completable 的 future

scala - Scala 中如何处理 POJO/JavaBean 模式?

scala - 为什么 Scala 有时需要在匿名函数中命名的参数?

scala - 更新到 Scala 2.10 时出现 list /类型标签问题

scala - 模式匹配 scala 2.13.4 的奇怪行为

scala - 无法在 Scala 中编译文件