Swift2.0 允许在闭包内使用未初始化的全局变量的奇怪情况
Strange case where Swift2.0 allows usage of an uninitialised global inside a closure
没错,这种情况有点扭曲,但我仍然很好奇这是否是 Swift2.0 编译器中的潜在错误。在你的 Xcode7 playground-
试试这个
var global : Int
var factorial : (Int->Int)!
factorial = { x in
global = global + 1
print(global)
return x == 0 ? 1 : x * factorial(x - 1)
}
factorial(5)
编译器愉快地编译甚至计算阶乘并递增全局变量,甚至在调用时在闭包内显示全局变量的值。现在尝试在调用 factorial(5) 后打印全局,现在编译器突然开始抱怨你在初始化之前尝试使用 'global'!
我认为这是编译器某处的错误,行为必须保持一致。但首先想到咨询专家!有什么想法吗?
在我看来像是一个错误。对我来说,在 Swift 1.2 和 2.0 中都可重现。归档雷达,Apple 将对此表示赞赏。
没错,这种情况有点扭曲,但我仍然很好奇这是否是 Swift2.0 编译器中的潜在错误。在你的 Xcode7 playground-
试试这个var global : Int
var factorial : (Int->Int)!
factorial = { x in
global = global + 1
print(global)
return x == 0 ? 1 : x * factorial(x - 1)
}
factorial(5)
编译器愉快地编译甚至计算阶乘并递增全局变量,甚至在调用时在闭包内显示全局变量的值。现在尝试在调用 factorial(5) 后打印全局,现在编译器突然开始抱怨你在初始化之前尝试使用 'global'!
我认为这是编译器某处的错误,行为必须保持一致。但首先想到咨询专家!有什么想法吗?
在我看来像是一个错误。对我来说,在 Swift 1.2 和 2.0 中都可重现。归档雷达,Apple 将对此表示赞赏。