2016-04-03 2 views
1

Я спросил здесь: https://stackoverflow.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8, но я хотел знать, есть ли альтернативы для создания лямбда в clojure.все равно построить лямбда-функцию в clojure?

Для случая использования, я пытаюсь обернуть библиотеку rethinkdb: http://www.rethinkdb.com/api/java/#map


Я могу ошибаться, но в драйвере rethinkdb, почему-то лямбды компилируются в Аст синтаксиса, которые преобразуются в js и отправляется в базу данных. Я считаю, что мне нужно как-то явно создать лямбду. http://www.rethinkdb.com/blog/lambda-functions/ поэтому этот вопрос How to implement lambda as a function called "lambda" in Clojure? показывает только, как использовать функцию, а не лямбду.

+0

Вы всегда можете использовать [ 'reify'] (http://clojure.github.io/clojure/clojure.core- api.html # clojure.core/reify) с соответствующим функциональным интерфейсом Java. Хотя я чувствую, что вы должны добавить здесь более подробную информацию, неясно, что вы подразумеваете под «построением лямбда-функции в Clojure». – glts

+0

см. Обновление ... хотя счастлив ошибаться в отношении того, как работает rethinkdb lambdas – zcaudate

ответ

6

Lambdas - это всего лишь синтаксический сахар, такой как макросы clojure. Вы не можете использовать макросы в java или синтаксис лямбда java в clojure. Но вы можете создать в clojure объект, созданный синтаксисом jamba java.

То есть, в java синтаксис лямбда создает объект, который реализует интерфейс в соответствии с типом метода. Этот интерфейс имеет один нестандартный и нестатический метод.

Если вы хотите построить «java лямбда» в clojure, то вам действительно нужно создать объект, реализующий этот интерфейс.

Функциональный интерфейс: https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html Как вы видите лямбды в качестве аргумента: How do I define a method which takes a lambda as a parameter in Java 8?

+0

, пожалуйста, ознакомьтесь с обновлением – zcaudate

Смежные вопросы