刚开始使用Scala
var c = 0
c += 1
的作品
c.+=
给了我error: value += is not a member of Int
+=
定义在哪里?
答案 0 :(得分:8)
Section 6.12.4 Assignment Operators of the Scala Language Specification (SLS)解释了这些复合赋值运算符是如何被去除的:
l ω= r
(其中ω
是<
,>
,!
以外的任何运算符字符序列,并且不以=
开头)
l.ω=(r)
IFF l
有一个名为ω=
的成员,或者可以隐式转换为具有名为ω=
的成员的对象。
否则,它会变得黯然失色
l = l.ω(r)
(l
除了保证只评估一次),如果那样的话题检查。
或者,更简单地说:编译器将首先尝试l.ω=(r)
,如果这不起作用,它将尝试l = l.ω(r)
。
这允许像+=
这样的东西像在其他语言中那样工作但仍然被覆盖以做一些不同的事情。
答案 1 :(得分:2)
实际上,您所描述的代码确实有用。
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)
,其中是在图书馆里。