我在这里问:https://stackoverflow.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8但是我想知道是否有替代品可以在clojure中构建lambdas。
对于用例,我正在尝试包装rethinkdb库:http://www.rethinkdb.com/api/java/#map
我可能错了,但在rethinkdb驱动程序中,不知何故lambda被编译成ast语法,转换为js并发送到数据库。我相信我需要以某种方式明确地创建一个lambda。 http://www.rethinkdb.com/blog/lambda-functions/ 所以这个问题How to implement lambda as a function called "lambda" in Clojure?只显示了如何使用函数,而不是lambda。
答案 0 :(得分:6)
Lambdas只是一种语法糖,就像clojure宏一样。你不能在java中使用宏,或者在clojure中使用java的“lambda语法”。但是你可以在clojure中创建java lambda语法创建的对象。
也就是说,在java中,lambda语法创建一个对象,该对象根据方法中的类型实现接口。该接口有一个非默认和非静态方法。
如果你想在clojure中构造一个“java lambda”,你真正需要做的就是创建一个实现该接口的对象。
功能界面: https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html 你如何看待lambdas作为一个论点: How do I define a method which takes a lambda as a parameter in Java 8?