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