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

时间:2017-08-28 14:23:08

标签: scala

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

1 个答案:

答案 0 :(得分:0)

通常,您可以定义i而不是valvar,因为它是语言规范定义的有效语法。

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

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}}