Ultimamente ho lavorato un po 'su come implementare un protocollo di rete binario in Scala. Molti dei campi nei pacchetti sono naturalmente associati a Scala Shorts. Vorrei incrementare in modo conciso una variabile Short
(non un valore). Idealmente, vorrei qualcosa come s += 1
(che funziona per Ints).Qual è il modo più conciso per incrementare una variabile di tipo Short in Scala?
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
L'operatore +=
non è definita su Short
, quindi sembra esserci un implicito conversione s
a un Int
precede l'aggiunta. Inoltre l'operatore + Short
restituisce un Int
. Ecco come funziona per Ints:
scala> var i = 0
i: Int = 0
scala> i += 1
scala> i
res2: Int = 1
Per ora mi vado con s = (s + 1).toShort
Tutte le idee?
Un po 'in ritardo, ho trovato un [post correlati] (http://stackoverflow.com/questions/10975245). La risposta di Ende Neu, con l'estensione di Paul, fornisce una soluzione migliore. Il post collegato chiarisce in qualche modo perché l'estensione di Paul funziona. – kilo
È anche interessante notare che la JVM non supporta direttamente operazioni aritmetiche su 'cortometraggi'. Le istruzioni bytecode funzionano sempre su 'int's. Vedere la [Java Virtual Machine Specification] (https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvms-2.11.3). – kilo