2014-09-04 50 views
5

如果運行此代碼,變量f似乎會影響函數f。無論如何要達到函數f?Swift中函數和變量的命名空間

func f (a:Int)->Int{ 
    return a + 43 
} 

var f = {(a:Int) in a + 42} 

var z = f(1) 
println(z) 
+0

爲什麼你試圖做到這一點?又名同名 – 2014-09-04 21:32:59

+4

我不相信有一種方法,我會認爲這是編譯器的缺陷。這應該是一個錯誤。我建議打開一個關於這個的雷達。有趣的是,首先聲明哪個並不重要。 var總是贏。 – 2014-09-04 22:05:58

+0

我會爲它添加一個雷達。 – cfischer 2014-09-05 11:49:16

回答

1

在斯威夫特,函數聲明只是爲你與關閉+可變的事情做了什麼捷徑。也就是說,函數名稱本質上是常量,應該總是這樣看待(你甚至可以傳遞函數名稱,沒有括號作爲參考)。

你正在做的是你將名字f重新命名爲變量閉包。看起來Swift有一個編譯器問題沒有抱怨這個問題。但是,這個問題永遠不會發生在良好的代碼中,所以它不是一個真正的問題。

雖然它可能有點混亂。