为什么变量不需要在 Scala 代码中定义?



我是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

通常,您可以定义不带valvari,因为它是由语言规范定义的有效语法。

当您在Scala中使用for压缩时,编译器会将其转换为foreachmapflatMap调用的序列。这意味着

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)

最新更新