Biorąc pod uwagę następujący kod scala:Dlaczego Scala definiuje operator "+ =" dla typów krótkich i bajtowych?
var short: Short = 0
short += 1 // error: type mismatch
short += short // error: type mismatch
short += 1.toByte // error: type mismatch
Nie kwestionując samej pisanie - to jasne, że "Short wartość + == Int".
Moje pytania są następujące:
1. Czy istnieje jakiś sposób na wykorzystanie operatora?
2. Jeśli nie, to dlaczego operator jest dostępny do użycia w skrócie & Bajt?
[A o rozszerzeniu * =, | = & = itd]
W rzeczywistości Short nie ma metody "+ =" lub "* =", możesz przejrzeć dokument dla skrótu http://www.scala-lang.org/api/current/index.html#scala. Krótki . x someoperator = y automatycznie tłumaczy na x = x someoperator y przez kompilator. – Eastsun
@Eastsun Ale też Int :-) 'a op = b' to cukier syntaktyczny dla rozwiniętej formy:' a = a b b', co wyjaśnia błąd typu (Short + Short -> Int). Nie wyjaśnia, dlaczego podjęto decyzję lub jaki użytek z tego konstruktu może mieć - lub czego nie może. (W języku C# jest całkowicie legalne wykonywanie 'bajtu + = 1', ale nie' bajt = bajt + 1', a zachowanie jest specyficzne w standardzie - istnieje niejawna rzutowanie z powrotem na typ LHS w języku C#). –
@pst Tak, możesz zrobić to samo w Javie, jak w C# (Jeśli dobrze pamiętam.) – Eastsun