我有一个'for'循环,类似于:
freq
当天,当我在FORTRAN中编码时,我被告知这是一种非常低效的编码大型'for'循环的方法。
Swift编译器是否识别出不变的限制并预先计算n - 1?
答案 0 :(得分:2)
我认为答案是肯定的。
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
会更好,它们是相同的。