den folgenden scala Code Gegeben:Warum definiert Scala einen Operator "+ =" für Short- und Byte-Typen?
var short: Short = 0
short += 1 // error: type mismatch
short += short // error: type mismatch
short += 1.toByte // error: type mismatch
ich nicht die zugrunde liegende Typisierung in Frage - es ist klar, dass "Short + Wert == Int".
Meine Fragen sind:
1. Gibt es überhaupt eine Möglichkeit, dass der Operator verwendet werden kann?
2. Wenn nicht, warum ist der Operator dann für Short & Byte verfügbar?
[Und durch die Erweiterung * =, | = & = etc.]
Eigentlich hat Short keine Methode "+ =" oder "* =", Sie können das Dokument für Short http://www.scala-lang.org/api/current/index.html#scala suchen. Kurz. x IrgendeinOperator = y wird vom Compiler automatisch in x = x-Operator y übersetzt. – Eastsun
@Eastsun Aber auch nicht Int :-) 'a op = b' ist syntaktischer Zucker für die erweiterte Form:' a = a op b', was den Typfehler erklärt (Short + Short -> Int). Es erklärt nicht, warum die Entscheidung getroffen wurde oder welchen Nutzen dieses Konstrukt haben könnte oder nicht. (In C# ist es vollkommen legal, "byte + = 1", aber nicht "byte = byte + 1" zu tun, und das Verhalten ist im Standard spezifisch - es gibt eine implizite Rückübertragung auf den LHS-Typ in C#). –
@pst Ja, du kannst dasselbe in Java machen wie in C# (Wenn ich mich richtig erinnere.) – Eastsun