2014-09-04 10 views
5

Wenn Sie diesen Code ausführen, scheint die Variable f die Funktion f zu schattieren. Gibt es trotzdem die Funktion f zu erreichen?Namespaces für Funktionen und Variablen in Swift

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

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

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

Warum versuchen Sie das zu tun? aka Name beide mit dem gleichen Namen –

+4

Ich glaube nicht, dass es einen Weg gibt, und ich würde dies als einen Fehler im Compiler betrachten. Dies sollte ein Fehler sein. Ich empfehle, ein Radar darüber zu öffnen. Interessant ist, dass es egal ist, was zuerst deklariert wird. Die Var gewinnt immer. –

+0

Ich werde ein Radar dafür hinzufügen. – cfischer

Antwort

1

Nr

In Swift, sind Funktionsdeklarationen einfach Verknüpfungen für das, was Sie mit diesem Verschluss tat + variable Sache. Das heißt, Funktionsnamen sind im Wesentlichen Konstanten und sollten immer als solche betrachtet werden (Sie können sogar den Funktionsnamen ohne Klammern als Referenz übergeben).

Was Sie tun, ist, dass Sie den Namen f der variablen Schließung neu definieren. Es scheint, dass Swift ein Compiler-Problem hat, das sich nicht darüber beschwert. Dieses Problem tritt jedoch bei gutem Code nie auf. Es handelt sich also nicht um ein echtes Problem.

Es kann jedoch ein wenig verwirrend sein.