2016-04-03 60 views
1

我在這裏問:https://stackoverflow.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8但我想知道是否有替代品構建clojure lambdas。有沒有在clojure中構造一個lambda函數?

對於使用的情況下,我試圖包裹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

您可以隨時使用['reify'](http://clojure.github.io/clojure/clojure.core- api.html#clojure.core/reify)和適當的Java功能界面。雖然我覺得你應該在這裏增加更多的細節,但是你不明白'在Clojure中構建lambda函數'的含義。 – glts

+0

請參閱更新...雖然很高興誤解了rethinkdb lambda的工作原理 – zcaudate

回答

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 你怎麼看lambda表達式作爲參數: How do I define a method which takes a lambda as a parameter in Java 8?

+0

請參閱更新 – zcaudate

相關問題