2016-10-01 17 views
3

我被功能重載解析帶密封蓋在夫特3.夫特3閉合重載解析

例如混淆,在代碼:

func f<T>(_ a: T) { 
    print("Wide") 
} 

func f(_ a: (Int)->(Int)) { 
    print("Narrow") 
} 

f({(a: Int) -> Int in return a + 1}) 

我期望Narrow,不Wide,要被打印到控制檯。任何人都可以解釋爲什麼選擇更具體的重載非閉合參數,但不是閉包,或者這是一個編譯器錯誤?

Swift 2展示了預期的行爲。

+0

對我而言,哪些行爲是「預期」並不明顯,但Swift 2和Swift 3在這裏給出了不同的答案。如果這會以一些關鍵的方式影響到你,那麼肯定會給https://bugs.swift.org提出一個錯誤;至少你會得到一個很好的答案,通常不到一天。 – matt

+0

是的,「預計」僅僅是「我個人並不認爲這會改變」。 –

回答

1

這可能是由於關閉參數的默認「轉義」行爲的更改。

如果更改特定功能:

func f(_ a:@escaping (Int)->Int) 
{ 
    print("Narrow") 
} 

它會打印「窄」預期

(這個這個,你可能不得不在較明顯的其他幾個地方也作出了同樣的變化)