我有一个类似于这样的“ for”循环:
for i in 0...n - 1 {
// do stuff, n is not changed
}
回想当年,当我使用FORTRAN进行编码时,我被告知这是一种编码大型“ for”循环的效率很低的方法。
Swift编译器是否可以识别不变的限制并预先计算n-1?
我认为答案是肯定的。
1...n - 1
代表一个Range
对象。它是的字面值Range
。因此,当编译到达循环并看到文字时,它会认为
好像您想创建一个新
Range<Int>
对象!干得好!嗯...所以我猜i
是Int
...
等等。
这意味着n - 1
在创建对象时会对它进行评估。并保持这种状态,不再进行第二次评估。这段代码通过不打个招呼来证明这一点:
var n = 10
for i in 1...n - 1 {
n = 2
print("Hello")
}
是的。
笔记:
1..<n
而不是1...n - 1
在这种情况下,它们是相同的。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句