从Java调用Clojure:为什么;新";样式(clojure.java.api.clojure)比;旧的;一(发电机级)?
读了这本书后,我感到有些困惑: 有两种可能与Java开发人员共享我在Clojure中编写的函数从Java调用Clojure:为什么;新";样式(clojure.java.api.clojure)比;旧的;一(发电机级)?,clojure,clojure-java-interop,Clojure,Clojure Java Interop,读了这本书后,我感到有些困惑: 有两种可能与Java开发人员共享我在Clojure中编写的函数 第一个是在JAR文件中提供它,这样他们就可以调用它,就像我用Java编写的一样。听起来很适合Clojure的宣传 第二种方法,据说是更好的方法,要求Java开发人员使用clojure.lang.IFn或clojure.lang.RT,并通过将函数名作为字符串(!)传递来调用函数,而不是仅仅调用它们 为什么第二种方法是“更好的方法”你在这里设置了一个错误的二分法。每种方法都涉及到创建一个jar文件:
- 第一个是在JAR文件中提供它,这样他们就可以调用它,就像我用Java编写的一样。听起来很适合Clojure的宣传
- 第二种方法,据说是更好的方法,要求Java开发人员使用
或clojure.lang.IFn
,并通过将函数名作为字符串(!)传递来调用函数,而不是仅仅调用它们clojure.lang.RT
为什么第二种方法是“更好的方法”你在这里设置了一个错误的二分法。每种方法都涉及到创建一个jar文件:JVM程序就是这样分发的。但是Java代码调用jar中包含的Clojure代码有3种不同的方式:
是我多年前按照这种方法编写的库的一个示例。用纯Clojure编写这篇文章绝非易事,因为传统的Java习语对Clojure来说非常陌生,而且它并不完全支持它们。通过编写我自己的Java shim,Java客户机可以获得一个非常舒适的界面,我可以编写感觉像Clojure的Clojure,而不是一堆gen类的废话。您在这里设置了一个错误的二分法。每种方法都涉及到创建一个jar文件:JVM程序就是这样分发的。但是Java代码调用jar中包含的Clojure代码有3种不同的方式:
是我多年前按照这种方法编写的库的一个示例。用纯Clojure编写这篇文章绝非易事,因为传统的Java习语对Clojure来说非常陌生,而且它并不完全支持它们。通过编写我自己的Java shim,Java客户端可以获得一个非常舒适的界面,我可以编写感觉像Clojure的Clojure,而不是一堆gen类的废话。我认为你错了,请再次阅读这个答案。它被称为使用
tiny。二项式(5,3)
@m0skit0:调用tiny。二项式(5,3)
是“旧方法”-这是我更喜欢的方法。“新方法”是@alex miller在下面进一步解释的方法,使用的表达式有IFn plus=Clojure.var(“Clojure.core”,“+”)
如果你想从字符串中计算代码。你从哪里读到这种方法更好?@m0skit0:也许我必须重新回答我的问题。简而言之:如果我用Clojure编写函数,例如(defn foo…
我希望我的Java朋友能够导入它并像用Java编写一样调用它;即x=foo()
-我不想让他们做类似于RT.invoke(“foo”)
的事情。我从哪里读到这种方法更好?请看Alex Miller(顶级Clojuter专家)的话:从Clojure 1.6.0开始,有一种新的首选方法来加载和调用Clojure函数。现在,这种方法比直接调用RT更好(并取代了这里的许多其他答案)。我认为你错了,请再次阅读该答案。它被称为使用tiny.二项式(5,3)
@m0skit0:调用tiny.二项式(5,3)
是“旧方法”——这是我更喜欢的方法。“新方法”“如果你想从字符串中计算代码,@alex miller在下面用IFn plus=Clojure.var(“Clojure.core”,“+”);
等表达式进一步解释了这个问题。你从哪里读到这种方法更好?@m0skit0:也许我必须重新回答我的问题。简而言之:如果我用Clo编写函数