的(我< -1〜100 [在這裏,我想這在程序運行期間改變條款])是否有可能通過子句中指定動態
所以,說,我有一個變量這是目前輪到的期望差距。我用while循環重寫了它,但是有沒有機會用構造來完成它。
var gap = 1
for(i<-1 to 100 by gap)
gap+=1
的(我< -1〜100 [在這裏,我想這在程序運行期間改變條款])是否有可能通過子句中指定動態
所以,說,我有一個變量這是目前輪到的期望差距。我用while循環重寫了它,但是有沒有機會用構造來完成它。
var gap = 1
for(i<-1 to 100 by gap)
gap+=1
這裏有一個回答您的實際問題,您的評論如下:
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
目前尚不清楚你的要求,但要注意以下表明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
by
就像任何其他方法的方法。和其他方法一樣,它所採用的參數不一定是文字,它可以是任何有效的Scala表達式,例如字段引用,方法調用或任意更復雜的表達式。
如何差距的變化?以某種可預測的/可編碼的方式,還是動態的,取決於循環中發生的事情? –
根據循環中計算出的某些條件,每次循環中都會在for循環內改變間隙。 – Dmitrii