无论如何在clojure中构造一个lambda函数?
Posted
技术标签:
【中文标题】无论如何在clojure中构造一个lambda函数?【英文标题】:is there anyway to construct a lambda function in clojure? 【发布时间】:2016-07-23 00:57:46 【问题描述】:我在这里问过:https://***.com/questions/36385548/how-to-programmatically-construct-a-lambda-in-java-8 但我想知道是否有替代方法可以在 clojure 中构造 lambda。
对于用例,我正在尝试包装 rethinkdb 库:http://www.rethinkdb.com/api/java/#map
我可能错了,但是在 rethinkdb 驱动程序中,不知何故 lambdas 被编译成 ast 语法,然后转换为 js 并发送到数据库。我相信我需要以某种方式明确地创建一个 lambda。 http://www.rethinkdb.com/blog/lambda-functions/ 所以这个问题How to implement lambda as a function called "lambda" in Clojure? 只展示了如何使用函数,而不是 lambda。
【问题讨论】:
您始终可以将reify
与适当的Java 功能接口一起使用。虽然我觉得你应该在这里添加更多细节,但不清楚你所说的“在 Clojure 中构造 lambda 函数”是什么意思。
查看更新...虽然很高兴对 rethinkdb lambda 的工作方式有误
【参考方案1】:
Lambda 只是一种语法糖,就像 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?
【讨论】:
以上是关于无论如何在clojure中构造一个lambda函数?的主要内容,如果未能解决你的问题,请参考以下文章
`let` 在 Clojure 中是如何实现的,它的开销是多少?