for(i< -1到100 [在这里我想要一个在程序运行期间发生变化的子句])
所以,比方说,我有一个变量,这是当前转弯的理想差距。我用while循环重写了它,但是有没有机会用于构造它。
var gap = 1
for(i<-1 to 100 by gap)
gap+=1
答案 0 :(得分:0)
目前尚不清楚你在问什么,但请注意以下内容表明gap
是可编程的:
scala> for (gap <- 1 to 5) {
| for (i <- 1 to 100 by gap) {
| if (i % 10 == 0) println(s"gap: $gap i: $i") } }
gap: 1 i: 10
gap: 1 i: 20
gap: 1 i: 30
gap: 1 i: 40
gap: 1 i: 50
gap: 1 i: 60
gap: 1 i: 70
gap: 1 i: 80
gap: 1 i: 90
gap: 1 i: 100
gap: 3 i: 10
gap: 3 i: 40
gap: 3 i: 70
gap: 3 i: 100
答案 1 :(得分:0)
by
就像任何其他方法一样。和任何其他方法一样,它所采用的参数不一定是文字,它可以是任何有效的Scala表达式,例如字段引用,方法调用或任意更复杂的表达式。
答案 2 :(得分:0)
根据您的评论,这是您实际问题的答案:
doSteps
获取范围的开始和结束,计算的初始值,接受计算的当前值的块以及范围中的当前索引,并返回更新的计算和下一个要使用的索引。
def doSteps[T](start: Int, end: Int)(z: T)(f: (T, Int) => (T, Int)): T =
{
if (start < end) {
val (newz, newStart) = f(z, start)
doSteps(newStart, end)(newz)(f)
} else
z
}
(您可以轻松更改它以返回下一个gap
- 只需将递归调用更改为doSteams(start + newStart)
)
示例:
import scala.util.Random
doSteps(1, 100)("a")
{ (acc, i) => print(s"$i ")
(acc + Random.nextPrintableChar(), i + Random.nextInt(5)) }
//> 1 4 4 8 9 10 12 15 15 17 17 21 24 25 25 29 30 32 35 36 36 40 42 46 49 53 57
//| 58 61 61 65 69 72 76 79 83 83 85 86 88 91 95 97
//| res0: String = a|^on3H-]>Zh]e;R(q3pTB9BQ9Y>p.Q&~_5a?~33ze{w