2017-08-28 33 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

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

相关问题