+ = scala中int的方法

Har*_*ran 3 types scala primitive-types

+ =(或任何赋值运算符)是用于Int类型的scala中的方法.

例如,

var x=5
x+=1
Run Code Online (Sandbox Code Playgroud)

这里我只能在变量时使用+ =方法.

我无法做到,

5+=1
Run Code Online (Sandbox Code Playgroud)

scala编译器是否将此方法视为特例?

为什么它在scala.Int类中不可用?

Lee*_*Lee 11

没有+=方法,它x = x + 1由编译器扩展.这在规范中有详细说明:

6.12.4赋值运算符

让我们在中缀操作l + = r中考虑赋值运算符,例如+ =,其中l,r

是表达.可以将该操作重新解释为对应于分配的操作

l = l + r
Run Code Online (Sandbox Code Playgroud)

除了操作的左侧l仅被评估一次.

如果满足以下两个条件,则重新解释.

  1. 左侧l没有名为+ =的成员,也无法通过隐式转换转换为名为+ =的成员的值.

  2. 赋值l = l + r是类型正确的.特别地,这意味着l指的是可以分配给的变量或对象,并且可以转换为具有名为+的成员的值.