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

时间:2012-06-11 06:19:51

标签: 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

我不质疑基础类型 - 很明显“短+值== Int”。

我的问题是:
1.有什么办法可以使用操作员吗?
2.如果没有,那么为什么操作员可以使用Short&字节?

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

1 个答案:

答案 0 :(得分:1)

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

def +(x: Short): Int

所以它总是返回一个Int。

鉴于此,你最终无法使用+ =“运算符”,因为+运算求值为Int(显然)无法分配给desugared版本中的“short”var:

short = short + short

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

x K= y

如果x是var而K是任何符号运算符,并且x中有K方法,则编译器将其转换或“desugar”为:

x = x K y

然后尝试继续编译。