请参阅以下代码:
val names = Set("Mike", "Jack")
names += "Jeff"
Run Code Online (Sandbox Code Playgroud)
会有错误:
error: reassignment to val
Run Code Online (Sandbox Code Playgroud)
我在一些书中看到,它说+=实际上是一种方法,代码可以是:
val names = Set("Mike", "Jack")
names.+=("Jeff")
Run Code Online (Sandbox Code Playgroud)
如果+=是一种方法,为什么要分配"名称"?
Mar*_*amy 10
scala.collection.mutable.Set有+ =方法.所以无论val还是var,你只是在底层集上调用一个方法.但scala.collection.immutable.Set没有+ =方法但有+方法.+ =在Scala中有特殊含义; 它可以像这样应用,names = names +"Jeff",因为这是重新分配给'name',编译器会报告错误.
示例(应用+并代替+ =重新分配)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |