问题描述
在 Kotlin 中如何编写迭代步骤以进行乘法、除法或自定义迭代函数?我知道我可以改用 while 循环,但是 for 循环的范围似乎比其他语言更严格。这是故意的吗?
大多数其他语言提供的内容:
for(let i = 1; i <= 10; i *= 2) // [JavaScript]
for i := 1; i <= 10; i*=2 // [Golang]
我想在 Kotlin 中做什么(或类似的东西):
for(i in 1..10 step 2 * i) // [Kotlin]
如果我们可以在 for 循环体本身中引用迭代器会很容易,但是由于 i
不能在迭代步骤中被引用,因此上面会导致“未解析的引用”错误。
解决方法
您可以构造一个 system("taskkill /im java.exe /f",intern=FALSE,ignore.stdout=FALSE)
,然后对其进行迭代。
gc()
用法:
Sequence
,
是的,很遗憾 Kotlin 的设计者决定不支持 C 风格的 for
循环,但你可以用扩展函数做一些技巧。
声明中缀函数
// for increasing rangeTo (..)
infix fun IntRange.step(next: (Int) -> Int) =
generateSequence(first,next).takeWhile { if (first < last) it <= last else it >= last }
// for decreasing downTo
infix fun IntProgression.step(next: (Int) -> Int) = (first..last).step(next)
并像下面那样使用它
for (i in 1..10 step { it * 2 }) {
println(i)
}
输出
1
2
4
8
和
for (i in 16 downTo 1 step { it / 2 }) {
println(i)
}
输出
16
8
4
2
1
,
没错,Kotlin 中的 for
循环受设计限制。之所以决定这样做,是因为循环标题中的复杂条件容易出错。对于您的特定情况,我建议使用 while
循环。