2
試圖編譯這段代碼使用重載的數學函數
pow(10,2)
struct Test {
var i:Int
func pow(_ p:Int) -> Int { return pow(i,p) }
}
var s = Test(i:10)
s.pow(2)
給我一個編譯器錯誤。很明顯,標準的math.h函數pow
被Swift的範圍規則所矇蔽了。由於math.h版本的pow
具有不同的簽名,這聽起來像是編譯器錯誤。但是有什麼辦法可以調用它嗎?
這是一個錯誤 - 請參閱[Swift 3.0:調用全局函數時編譯器錯誤最小(T,T)在數組或字典擴展名](http://stackoverflow.com/questions/39602298/swift-3-0 -compiler-錯誤呼全局-FUNC-mintt叔在陣列或 - dicti時)。解決方案是通過使用函數所在的模塊名稱來消除歧義。 –
Hamish
儘管在你的情況下,首先沒有對'(Int,Int) - > Int'進行'pow'重載 - 調用'pow(10,2)'實際上使用了重載'(Decimal,Int) - > Decimal ' – Hamish
'pow'返回(並接受)一個十進制數,而不是一個Int - 我認爲編譯器由於類型推斷而丟失。這突然起作用[這些令人討厭的修改](https://www.evernote.com/l/AOxOd1fuS1xElIcTcfPt3E_QldJJf1cBTXU),但它確實看起來像一個編譯器錯誤。 – Moritz