5

次のscalaコードが与えられます:

var short: Short = 0
short += 1        // error: type mismatch
short += short    // error: type mismatch
short += 1.toByte // error: type mismatch

基になるタイピングに疑問はありません。「Short+value==Int」であることは明らかです。

私の質問は次のとおり
です。1。演算子を使用できる方法はありますか?
2.そうでない場合、なぜ演算子はShort&Byteで使用できるのですか?

[そして拡張により*=、| =&=など]

4

1 に答える 1

2

問題は、Short クラスの "+(Short)" が次のように定義されていることです。

def +(x: Short): Int

したがって、常に Int を返します。

これを考えると、 += 「演算子」を使用できなくなります。これは、 + 操作が Int に評価され、(明らかに) desugared バージョンの「短い」変数に割り当てることができないためです。

short = short + short

2 番目の質問については、scala コンパイラが次のような式を見つけたときに「利用可能」です。

x K= y

また、x が var で K が記号演算子であり、x に K メソッドがある場合、コンパイラはそれを次のように変換または「desugar」します。

x = x K y

そして、それでコンパイルを続行しようとします。

于 2012-06-14T03:27:00.733 に答える