5

给定以下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 & Byte 上使用?

[通过扩展 *=、|= &= 等]

4

1 回答 1

2

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

def +(x: Short): Int

所以它总是返回一个 Int。

鉴于此,您最终将无法使用 += "operator",因为 + 操作的计算结果为 Int,它(显然)不能分配给 desugared 版本中的“short” var:

short = short + short

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

x K= y

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

x = x K y

然后尝试继续编译。

于 2012-06-14T03:27:00.733 回答