我是Scala的初学者。我在STEP 7中看到了这些代码。用类型参数化数组的编程,第3版2。
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
通常,您可以定义不带val
或var
的i
,因为它是由语言规范定义的有效语法。
当您在Scala中使用for压缩时,编译器会将其转换为foreach
、map
或flatMap
调用的序列。这意味着
for (i <- 0 to 2)
变成:
scala.Predef.intWrapper(0).to(2).foreach(i => print(greetStrings(i)))
您可以看到,它仅在foreach
的范围内定义i
,并且仅用于创建函数实例,而不用于其他任何操作。
var i
是一个没有类型的变量声明,这是Scala中的编译时错误。您需要告诉编译器它应该是什么类型,并初始化它:
var i = 0
for (i <- 0 to 2)
print(greetStrings(i))
甚至更好:
greetStrings.foreach(println)