Scala处理中的for问题

Jos*_*lez 1 oop applet functional-programming scala

在下面的代码中,当我尝试i = i + 10它时将无法编译,并出现错误cannot reassign to val.所以我var i = 0;在之前添加了for,但变量从未使用过:

var i = 0;
for(i <- 5 to 25) {
    i = i + 10
    ellipse(150, 150, tamano + i, tamano + i)
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*ich 5

您应该通过在线Scala教程熟悉一些Scala习语.这将涵盖此类问题.

for在Scala中使用时,val会在每个循环中创建一个新的.在你的例子中,iin the forshadow the outer var i,永远不会被使用.

在Scala中,vals无法重新分配.您可以随时分配新val的:

val j = i + 10
Run Code Online (Sandbox Code Playgroud)

然后使用j.

这段代码远非惯用的Scala,它主要基于不变性的概念.您可以尝试以下内容:

for(i <- 5 to 25 by 10) {
    ellipse(150, 150, tamano + i, tamano + i)
}
Run Code Online (Sandbox Code Playgroud)

要么:

(5 to 25 by 10).foreach { i =>
    ellipse(150, 150, tamano + i, tamano + i)
}
Run Code Online (Sandbox Code Playgroud)

还要注意的是toby是为在方法只是语法糖Range对象:

Range.inclusive(start = 5, end = 25, step = 10) == (5 to 25 by 10) //true
Run Code Online (Sandbox Code Playgroud)