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上使用?
[并通过扩展*=,| =&=等]
问题似乎是 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)
然后尝试继续编译。
| 归档时间: |
|
| 查看次数: |
323 次 |
| 最近记录: |