Ich habe in letzter Zeit ein bisschen an der Implementierung eines binären Netzwerkprotokolls in Scala gearbeitet. Viele der Felder in den Paketen sind natürlich Scala Shorts zugeordnet. Ich möchte eine Short
Variable (kein Wert) prägnant erhöhen. Im Idealfall möchte ich etwas wie s += 1
(die für Ints funktioniert).Was ist der kürzeste Weg, um eine Variable vom Typ Short in Scala zu inkrementieren?
scala> var s = 0:Short
s: Short = 0
scala> s += 1
<console>:9: error: type mismatch;
found : Int
required: Short
s += 1
^
scala> s = s + 1
<console>:8: error: type mismatch;
found : Int
required: Short
s = s + 1
^
scala> s = (s + 1).toShort
s: Short = 1
scala> s = (s + 1.toShort)
<console>:8: error: type mismatch;
found : Int
required: Short
s = (s + 1.toShort)
^
scala> s = (s + 1.toShort).toShort
s: Short = 2
+=
Der Bediener wird nicht auf Short
definiert ist, so scheint es eine implizite Umwandlung s
an ein Int
die Zugabe vorhergehenden zu sein. Außerdem gibt Short
's + -Operator eine Int
zurück. Hier ist, wie es für Ints funktioniert:
scala> var i = 0
i: Int = 0
scala> i += 1
scala> i
res2: Int = 1
Denn jetzt ich mit s = (s + 1).toShort
Irgendwelche Ideen gehen werde?
Etwas verspätet, habe ich einen [verwandten Beitrag] (http://stackoverflow.com/questions/10975245) gefunden. Ende Neu's Antwort, mit Pauls Erweiterung, bietet eine bessere Lösung. Der verlinkte Beitrag beleuchtet etwas, warum Pauls Erweiterung funktioniert. – kilo
Interessant ist auch, dass die JVM nicht direkt arithmetische Operationen auf "Shorts" unterstützt. Die Bytecode-Befehle arbeiten immer auf 'int's. Weitere Informationen finden Sie in der [Java Virtual Machine-Spezifikation] (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.11.3). – kilo