2017-08-28 61 views
1

我是一個斯卡拉初學者。我在中看到了這個代碼。STEP 7.具有類型的參數化陣列 of 用Scala編程,第3版2爲什麼變量不需要在Scala代碼中定義?

val greetStrings = new Array[String](3) 
greetStrings(0) = "Hello" 
greetStrings(1) = ", " 
greetStrings(2) = "world!\n" 
for (i <- 0 to 2) 
    print(greetStrings(i)) 

我不明白「我」不需要定義。當我寫這樣的一些代碼:出現

val greetStrings = new Array[String](3) 
greetStrings(0) = "Hello" 
greetStrings(1) = ", " 
greetStrings(2) = "world!\n" 
var i 
for (i <- 0 to 2) 
    print(greetStrings(i)) 

代碼錯誤:

/Users/tianci/Desktop/helloworld.scala:6: error: '=' expected but ';' found. 
for (i <- 0 to 2) 
^ 
one error found 
+1

請先看看Scala的教程 – cchantep

回答

0

一般情況下,你可以定義i沒有valvar,因爲它是有效的語法由語言規範定義。

當您在Scala中使用它時,編譯器會將它轉換爲調用序列foreach,mapflatMap。這意味着,

for (i <- 0 to 2) 

變成:

scala.Predef.intWrapper(0).to(2).foreach(i => print(greetStrings(i))) 

,你可以看到定義i只有在foreach範圍,並且只用於創建函數實例而已。


var i是沒有類型,這是Scala編譯時間錯誤變量聲明。你需要告訴它是什麼類型預計編譯器,並將其初始化:

var i = 0 
for (i <- 0 to 2) 
    print(greetStrings(i)) 

甚至更​​好:

greetStrings.foreach(println) 
+0

但對於環第一個代碼,「我」似乎沒有被定義。 –

+0

@天才豬看到我更新的答案。 –

相關問題