Учитывая следующий код scala:
var short: Short = 0
short += 1 // error: type mismatch
short += short // error: type mismatch
short += 1.toByte // error: type mismatch
Я не сомневаюсь в базовой типизации - ясно, что «Short + value == Int».
Мои вопросы:
1. Можно ли вообще использовать этот оператор?
2. Если нет, то почему оператор доступен для использования в Short & Byte?
[И по расширению *=, |= &= и т. д.]
a op= b
- это синтаксический сахар для расширенной формы:a = a op b
, что объясняет ошибку типа (Short + Short -> Int). Это не объясняет, почему было принято такое решение или какую пользу эта конструкция может — или не может — иметь. (В C# совершенно законно делатьbyte+=1
, но неbyte=byte+1
, и поведение специфично в стандарте — в C# существует неявный возврат к типу LHS). - person   schedule 11.06.2012