我对 Swift 3 中的函数重载解析和闭包感到困惑。
例如,在代码中:
func f<T>(_ a: T) {
print("Wide")
}
func f(_ a: (Int)->(Int)) {
print("Narrow")
}
f({(a: Int) -> Int in return a + 1})
我预计Narrow
, not Wide
,打印到控制台。谁能解释为什么为非闭包参数选择更具体的重载而不是为闭包选择更具体的重载,或者这是一个编译器错误?
Swift 2 表现出了预期的行为。
这可能是由于闭包参数的默认“转义”行为发生了变化。
如果将特定函数更改为:
func f(_ a:@escaping (Int)->Int)
{
print("Narrow")
}
它将按预期打印“Narrow”(这与您可能必须在其他几个更明显的地方进行的更改相同)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)