2016-04-03 7 views
1

Ich fragte hier: https://stackoverflow.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8 aber ich wollte wissen, ob es Alternativen gibt, Lambdas in clojure zu konstruieren.gibt es sowieso, um eine Lambda-Funktion in clojure zu konstruieren?

Für den Anwendungsfall, ich bin versucht, die rethinkdb Bibliothek zu wickeln: http://www.rethinkdb.com/api/java/#map


ich falsch sein, aber in dem rethinkdb Fahrer, irgendwie die Lambda-Ausdrücke in ast Syntax kompiliert, die konvertiert werden js und an die Datenbank gesendet. Ich glaube, ich muss irgendwie explizit ein Lambda erstellen. http://www.rethinkdb.com/blog/lambda-functions/ so diese Frage How to implement lambda as a function called "lambda" in Clojure? zeigt nur, wie Sie eine Funktion verwenden, nicht ein Lambda.

+0

Sie können jederzeit verwenden [ 'reify'] (http://clojure.github.io/clojure/clojure.core- api.html # clojure.core/retify) mit der entsprechenden Java-Funktionsschnittstelle. Obwohl ich denke, dass Sie hier mehr Details hinzufügen sollten, ist es nicht klar, was Sie meinen, indem Sie eine Lambda-Funktion in Clojure konstruieren. – glts

+0

siehe update ... obwohl glücklich, falsch zu sein, wie die rethinkdb lambdas funktionieren – zcaudate

Antwort

6

Lambdas sind nur eine Syntax Zucker, wie Clojure Makros. Sie können KEINE Makros in Java oder die "Lambda-Syntax" von Java in clojure verwenden. Aber Sie können in clojure das Objekt erstellen, das die Java-Lambda-Syntax erzeugt.

Das heißt, in Java erstellt die Lambda-Syntax ein Objekt, das die Schnittstelle entsprechend dem Typ in der Methode implementiert. Diese Schnittstelle hat eine einzige nicht standardmäßige und nicht statische Methode.

Wenn Sie ein "Java Lambda" in Clojure erstellen möchten, was Sie wirklich tun müssen, ist ein Objekt zu erstellen, das diese Schnittstelle implementiert.

Funktionsschnittstelle: https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html Wie Sie die Lambda-Ausdrücke als Argument sehen: How do I define a method which takes a lambda as a parameter in Java 8?

+0

siehe update – zcaudate

Verwandte Themen