Учитывая следующий код SCALA:Почему Scala определяет оператор «+ =» для типов Short и Byte?
var short: Short = 0
short += 1 // error: type mismatch
short += short // error: type mismatch
short += 1.toByte // error: type mismatch
Я не оспариваю основной набор текста - это ясно, что «Short + значение == Int».
Мои вопросы:
1. Есть ли вообще способ использования оператора?
2. Если нет, то почему оператор доступен для использования на Short & Byte?
[И расширение * =, | = & =, и т.д.]
На самом деле, у Short нет метода «+ =» или «* =», вы можете посмотреть документ для Short http://www.scala-lang.org/api/current/index.html#scala. Короткий . x someoperator = y автоматически переводятся в x = x someoperator y компилятором. – Eastsun
@ Eastsun Но и Int :-) 'a op = b' не является синтаксическим сахаром для расширенной формы:' a = a op b', что объясняет ошибку типа (Short + Short -> Int). Он не объясняет, почему было принято решение или что использовать эту конструкцию, возможно, или нет. (В C# вполне законно делать 'byte + = 1', но не' byte = byte + 1', а поведение специфично в стандарте - есть неявный откат к типу LHS в C#). –
@pst Да, вы можете сделать то же самое на Java, что и на C# (если я правильно помню.) – Eastsun