2011-07-28 59 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作爲Int它按預期工作? 問題是我猜你的打算是由編譯器誤讀: 它應該如何知道你聲明一個Char來獲得它的int值來添加另一個Int如果它呢?您正在嘗試在分配後更改變量的類型,該如何工作?因此,從var ch1開始:Int ='a',它起作用。