给出以下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&字节?
[并且通过扩展* =,| =& =等等]
答案 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
然后尝试继续编译。