Scala 处理中的 for 问题
Issue with for in Scala Processing
在下面的代码中,当我尝试 i = i + 10
时,它无法编译,错误为 cannot reassign to val
。所以我在 for
之前添加了 var i = 0;
,但从未使用过该变量:
var i = 0;
for(i <- 5 to 25) {
i = i + 10
ellipse(150, 150, tamano + i, tamano + i)
}
那是因为 i
是一个 val
,因为它是传递给 foreach
的函数的参数(这是你的 for
理解去糖化的):
for(i <- 5 to 25) {
doWorkWith(i)
}
变成:
(5 to 25).forEach(i => doWorkWith(i))
参数是不可变的,因此您不能重新分配 i
。
此处的解决方案是为您的中间值使用另一个名称:
for(i <- 5 to 25) {
val offset = i + 10
ellipse(150, 150, tamano + offset, tamano + offset)
}
(或者,在这种情况下,您可以将范围从 5 to 25
更改为 15 to 35
并避免额外添加)
您应该通过在线 Scala 教程来熟悉一些 Scala 习语。这将涵盖此类问题。
当您在 Scala 中使用 for
时,每个循环都会创建一个新的 val
。在您的示例中,for
中的 i
覆盖了永远不会被使用的外部 var i
。
在 Scala 中,无法重新分配 vals
。您始终可以通过以下方式分配新的 val
:
val j = i + 10
然后使用j
。
此代码与惯用的 Scala 相去甚远,Scala 很大程度上基于不变性的思想。您可以尝试以下操作:
for(i <- 5 to 25 by 10) {
ellipse(150, 150, tamano + i, tamano + i)
}
或:
(5 to 25 by 10).foreach { i =>
ellipse(150, 150, tamano + i, tamano + i)
}
另请注意,to
和 by
只是 Range
对象上的方法的语法糖:
Range.inclusive(start = 5, end = 25, step = 10) == (5 to 25 by 10) //true
在下面的代码中,当我尝试 i = i + 10
时,它无法编译,错误为 cannot reassign to val
。所以我在 for
之前添加了 var i = 0;
,但从未使用过该变量:
var i = 0;
for(i <- 5 to 25) {
i = i + 10
ellipse(150, 150, tamano + i, tamano + i)
}
那是因为 i
是一个 val
,因为它是传递给 foreach
的函数的参数(这是你的 for
理解去糖化的):
for(i <- 5 to 25) {
doWorkWith(i)
}
变成:
(5 to 25).forEach(i => doWorkWith(i))
参数是不可变的,因此您不能重新分配 i
。
此处的解决方案是为您的中间值使用另一个名称:
for(i <- 5 to 25) {
val offset = i + 10
ellipse(150, 150, tamano + offset, tamano + offset)
}
(或者,在这种情况下,您可以将范围从 5 to 25
更改为 15 to 35
并避免额外添加)
您应该通过在线 Scala 教程来熟悉一些 Scala 习语。这将涵盖此类问题。
当您在 Scala 中使用 for
时,每个循环都会创建一个新的 val
。在您的示例中,for
中的 i
覆盖了永远不会被使用的外部 var i
。
在 Scala 中,无法重新分配 vals
。您始终可以通过以下方式分配新的 val
:
val j = i + 10
然后使用j
。
此代码与惯用的 Scala 相去甚远,Scala 很大程度上基于不变性的思想。您可以尝试以下操作:
for(i <- 5 to 25 by 10) {
ellipse(150, 150, tamano + i, tamano + i)
}
或:
(5 to 25 by 10).foreach { i =>
ellipse(150, 150, tamano + i, tamano + i)
}
另请注意,to
和 by
只是 Range
对象上的方法的语法糖:
Range.inclusive(start = 5, end = 25, step = 10) == (5 to 25 by 10) //true