2017-09-17 3 views
1

Ich bin völlig ratlos, wie die Funktion addTwoNumbers im Swift playground-Codebeispiel unten "(+)" als Funktion des Typs (Int, Int) -> Int zurückgibt und später die beiden Zahlen zusammen erfolgreich addiert einfach "addTwoNumbers (2,2)" aufrufen.Warum kann eine Swift-Funktion einen mathematischen Operator alleine zurückgeben?

Ich konnte keine Erklärung in der Swift-Dokumentation finden, da diese kreative Lösung dort zu fehlen scheint. Ich habe StackOverflow-Antworten gesehen, die ähnlichen Code als Antworten auf andere Fragen veröffentlichen, aber nie erklärt warum "= (+)" funktioniert. Was vermisse ich?

Bitte beachten Sie: Ich verstehe Betreiber sind Funktionen, die First-Class-Funktionen sind. Ich verstehe auch das Konzept der Funktionen hoher Ordnung. Ich habe das Codebeispiel gekürzt, um beim Thema zu bleiben, was (+) ist.

let addTwoNumbers: (Int, Int) -> Int = (+) 
print(addTwoNumbers(5,3)) //8 
+0

Einfachere bitte @Carcigenicate zu func addTwoNumbers(_ a: Int, _ b: Int) -> Int { return a + b } ist. Ist das Einfügen des + in Klammern ein Objekt? Und indem es mit zwei Argumenten aufgerufen wird, wird es zum Äquivalent von 2 + 2? –

+0

@Carcigenicate: Ein Kommentar von https://math.stackexchange.com/questions/168378/operator-vs-function, besagt "alle Operatoren sind Funktionen". Wenn also eine Funktion einen Operator zurückgibt (in diesem Fall (+), der auch eine Funktion ist), ist es sicher anzunehmen, dass die einzige Möglichkeit, sie aufzurufen, über das Add (2,2) ist, so wie man es ausdrucken würde ("Hallo")) Mit anderen Worten, wir rufen die Funktion + auf, die zwei Argumente benötigt, aber statt + (2,2) einzugeben, müssen wir add (2,2) entsprechend dem bereitgestellten Codebeispiel eingeben? –

+0

Mein Beispiel und meine Frage wurden auf die Swift-Sprache im Bereich der Higher Order Function zugeschnitten, aber Ihre Antwort gibt mir eine Richtung, um das Konzept in jeder Sprache besser zu verstehen. –

Antwort

0

In Ihrem Beispiel nichts gibt wirklich +, was es tut, ist der Wert + (Operatoren sind Funktionen und Funktionen Werte betrachtet werden können) zuweisen zu einer Variablen, nämlich addTwoNumbers.

Der Typ dieser Variablen ist (Int, Int) -> Int, d. H. Eine Funktion von zwei Ints, die ein int zurückgibt. Jetzt sind Funktionen eine spezielle Art von Variablen, die Klammern als eine Art Postfix-Operator nehmen können, ein bisschen wie normale Variablen nimmt eine .. Wenn Sie den Namen addTwoNumbers ohne Klammern schreiben, bezieht er sich auf die Funktion (die zufällig + ist), aber mit ihnen und einigen Operanden wird stattdessen die Funktion angewendet, und der Wert ist, was auch immer die Funktion mit diesen Argumenten zurückgibt.

Beachten Sie, dass let addTwoNumbers: (Int, Int) -> Int = (+) ziemlich gleichwertig

Verwandte Themen