作業是這裏的關鍵。 請看下面REPL會話:
[email protected] ~ $ scala
Welcome to Scala version 2.11.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val x:Char = 'a'
x: Char = a
scala> x + 1
res0: Int = 98
scala> var y:Char = 'a'
y: Char = a
scala> y + 1
res1: Int = 98
scala> y = y + 1
<console>:8: error: type mismatch;
found : Int
required: Char
y = y + 1
^
scala>
因此,大家可以看到,除非你試圖重新分配變量值一切順利。當你寫'a'+1
或x + 1
它被轉換爲Int
。 因此,當您最後嘗試x = x + 1
重新分配時,則您正在嘗試將Int
值分配給Char
變量。這解釋了爲什麼會出現編譯錯誤。
在Char
伴侶對象中有implicit def char2int(x: Char): Int
方法。 我認爲在var x:Char = 'a' + 1
發生的第一件事就是調用此方法將'a'轉換爲97.然後將97加1,均爲Int
s。然後,變量x
以與在val y:Char = 98
中相同的方式得到實例化。我認爲這解釋了變量初始化如何工作。
這不回答爲什麼'變種X:字符= A + 1'作品,但'X = X + 1 '不。在第一次賦值時,「a + 1」隱式轉換爲「Char」,但在重新分配時它不會。爲什麼? –
我編輯了我的答案。如果這與我認爲的不同,請投票給我的答案刪除,因爲那意味着我不瞭解底層的東西。 –
也讓我們區分「第一作業」和「初始化」,因爲我認爲這很重要。變量初始化與值初始化沒有區別。我的意思是'val x:Char ='a'+ 1'與這個問題的'var x:Char ='a'+ 1'相同。 –