2011-07-28 5 views
1

なぜ以下のコンパイルが行われますか?誤ったコンパイル時エラー

scala> val ch1 = 'a' + 'b' 
ch1: Int = 195 

ただし、次の事項はありませんか?

scala> var ch1 = 'a' 
ch1: Char = a 

scala> ch1 += 'b' 
<console>:9: error: type mismatch; 
found : Int 
required: Char 
     ch1 += 'b' 
     ^

scala> ch1 = ch1 + 'b' 
<console>:8: error: type mismatch; 
found : Int 
required: Char 
     ch1 = ch1 + 'b' 
       ^

なぜ、エラーメッセージが誤解を招くのはなぜですか? required: Charと言うのはなぜ私が渡しているのは明らかにCharでしょうか?

答えて

7

Charと別のCharを追加すると、結果はIntになります。

scala> 'a' + 'c'  
res2: Int = 196 

これは、エラーメッセージの「見つかった」部分です。

2

私はそれが期待どおりに動作するようにch1に注釈を付けると、ここでコンパイラを助けなければならないと思いますか? 問題はあなたの意図がコンパイラによって間違っていると思います。 Charを宣言して、別のIntを追加するint値を取得する方法を知っているはずです。代入後に変数の型を変更しようとしていますが、どうすればよいでしょうか?したがって、var ch1:Int = 'a'から始まり、それが動作します。