5
:ScalaはShort型とByte型に対して "+ ="演算子を定義するのはなぜですか?次Scalaのコードが与えられ
var short: Short = 0
short += 1 // error: type mismatch
short += short // error: type mismatch
short += 1.toByte // error: type mismatch
は、私は基本的なタイピングを問うていない - それは「ショート+値== INT」ことは明らかです。
私の質問は次のとおりです。
1.オペレータが使用できる方法はありますか?
2.そうでない場合、なぜオペレータは短い&バイトで使用できるのですか?
[ひいては* =、| = & =など]
実際、Shortには "+ ="または "* ="というメソッドがありません。短いhttp://www.scala-lang.org/api/current/index.html#scalaのドキュメントを見ることができます。短くx someoperator = yはコンパイラによって自動的にx = x someoperator yに変換されます。 – Eastsun
@Eastunしかし、どちらもInt :-) 'a op = b'は拡張形式の文法的砂糖です:' a = a op b'は型エラー(Short + Short - > Int)を説明しています。それはなぜ決定がなされたのか、あるいはこの構成を使用するかどうかを説明するものではありません。 (C#では、 'byte + = 1'を行うのは完全に合法ですが、' byte = byte + 1'はできません。そして、その振る舞いは標準的なものです - C#のLHS型への暗黙のキャストがあります。 –
@pstはい、C#のようにJavaで同じことをすることができます(正しく覚えていれば) – Eastsun