刚开始使用 Scala
var c = 0
c += 1
作品c.+=
给我error: value += is not a member of Int
+=
在哪里定义的?
Scala 语言规范 (SLS) 的第 6.12.4 节赋值运算符 解释了此类复合赋值运算符是如何脱糖的:
l ω= r
(其中
ω
是除 <
、>
、!
之外的任何运算符字符序列,并且不以 =
开头)被脱糖为
l.ω=(r)
IFF
l
有一个名为 ω=
的成员,或者可以隐式转换为一个具有名为 ω=
的成员的对象。
否则,它会被脱糖为
l = l.ω(r)
(除了
l
保证只被评估一次),如果类型检查。
或者,更简单地说:编译器将首先尝试
l.ω=(r)
,如果这不起作用,它将尝试l = l.ω(r)
.
这允许像
+=
这样的东西像在其他语言中一样工作,但仍然被覆盖以做不同的事情。
实际上,您描述的代码确实有效。
scala> var c = 4
c: Int = 4
scala> c.+=(2) // no output because assignment is not an expression
scala> c
res1: Int = 6
我怀疑(但不能肯定地说)它无法在库中找到,因为编译器将其去除(重写)为
c = c.+(1)
,在库中。