+ =(或任何赋值运算符)是用于Int类型的scala中的方法。
例如,
var x=5
x+=1
这里我只能在变量时使用+ =方法。
我无法做到,
5+=1
scala编译器是否将此方法视为特殊情况?
为什么它在scala.Int类中不可用?
答案 0 :(得分:11)
没有+=
方法,编译器将其扩展为x = x + 1
。详情见specification:
6.12.4分配操作员
让我们在中缀操作中考虑一个赋值运算符,例如+ = l + = r,其中l,r
是表达式。可以将此操作重新解释为操作 这对应于作业
l = l + r
除了操作的左侧l仅被评估一次。
如果满足以下两个条件,则会重新解释 满足。
左侧l没有名为+ =的成员,也无法通过隐式转换转换为具有成员的值 名为+ =。
- 的成员的值 醇>
赋值l = l + r是类型正确的。特别是这意味着l指的是可以分配给的变量或对象, 并且可以转换为名为+。