为什么Scala为Short和Byte类型定义了一个"+ ="运算符?

Ric*_*tze 5 scala scala-2.8 scala-2.9

给出以下scala代码:

var short: Short = 0
short += 1        // error: type mismatch
short += short    // error: type mismatch
short += 1.toByte // error: type mismatch
Run Code Online (Sandbox Code Playgroud)

我没有质疑基础类型 - 很明显"Short + value == Int".

我的问题是:
1.有没有办法可以使用运营商?
2.如果没有,那么为什么操作员可以在Short&Byte上使用?

[并通过扩展*=,| =&=等]

Pab*_*oni 2

问题似乎是 Short 类上的“+(Short)”定义为:

def +(x: Short): Int
Run Code Online (Sandbox Code Playgroud)

所以它总是返回一个 Int。

鉴于此,您最终无法使用 += “运算符”,因为 + 运算计算结果为 Int,它(显然)不能分配给脱糖版本中的“短”var:

short = short + short
Run Code Online (Sandbox Code Playgroud)

至于你的第二个问题,它是“可用的”,因为当 scala 编译器找到如下表达式时:

x K= y
Run Code Online (Sandbox Code Playgroud)

如果 x 是一个 var 并且 K 是任何符号运算符并且 x 中有 K 方法,那么编译器会将其翻译或“脱糖”为:

x = x K y
Run Code Online (Sandbox Code Playgroud)

然后尝试继续编译。