Wenn ich Dokumente oder Beispiele lese, sehe ich oft die Idee, dass man einer Variablen eine anonyme Funktion zuweisen kann. Warum sollte ich das eigentlich tun, anstatt nur eine neue Funktion zu definieren?Warum sollte ich einer Variablen eine anonyme Funktion zuweisen?
Einige Beispiele:
Clojure/Lisp
(def add2
(fn [a] (+ 2 a))
(add2 4) ;; => 6
Python
add2 = lambda e: e + 2
add2(3) # => 5
Scala
val add2 = (x: Int) => x + 2
add2(5) /* => 7 */
Offensichtlich sind diese triviale Beispiele, aber in der Produktion Code, ich denke, in der Regel von einer anonymen Funktion eine one off Funktion sein, die ich für einen bestimmten Anwendungsfall müssen (man denke höher kinded Typen und dergleichen).
Kann jemand erklären, warum ich einer Variablen eine anonyme Funktion zuweisen würde? Ist es eine Laufzeit-/Kompilierzeit-Sache? Gibt es bestimmte Leistungsmerkmale, die das günstig machen?
Dies ist in erster Linie auf der Grundlage von Meinungen/Stil. Aber die Verwendung von Lambdas wie in ** Python ** hat keinen anderen "Zweck", als das Debugging zu erschweren. –
Ich gebe manchmal einer Lambda-Funktion einen Namen, wenn ich eine 'key'-Funktion brauche (zB für' sort') und wenn ich die Funktion in der gleichen Zeile definiere, in der ich sie als Argument verwende, fühle ich mich zu kurz, definiere aber ein die normale Funktion fühlt sich zu sehr an. – timgeb
Ich habe das heute Morgen getan. Ich habe 2 höherwertige Funktionen getestet, die verschiedene Implementierungen hatten, aber identische Ein-/Ausgaben haben sollten. Ich band die übergebene Funktion in ein "Let" und benutzte sie dann im Body. Ich hätte es als eine konkrete Funktion definieren können, aber das war ausreichend für einen schnellen Test. – Carcigenicate