从Clojure开始,使用Java库很容易......但Clojure没有哪些库最好用Java完成?
答案 0 :(得分:1)
对这个答案提出一个简单的问题并不容易,因为首先需要定义 Clojure库和 Java库之间的区别。 (更重要的是,因为Clojure是一个Java库:))
好的,让我们从一个前提开始,即Clojure库是用Clojure编写的任何库,只是忽略Clojure实现本身的Java代码。但是,如果给定库使用一些Java依赖,比如说一个Apache Commons库会怎样?它仍然可以作为Clojure而不是Java库吗?
我自己的标准(我也猜测你的标准)因为两者之间的区别在于库是否公开了一个带有名称空间,函数,序列的Clojure风格的接口,或者是带有类,方法和类的Java风格的接口。集合。
在这些Java库中编写Clojure包装器几乎是微不足道的。根据我的经验,如果您希望在应用程序的整体功能设计中适应库的功能,那么这非常有用。一个简单的例子是,如果你想对序列进行map
Java方法。您可以使用ad-hoc定义的匿名函数来包装方法调用,也可以使用包装器层中的命名函数。如果你经常这样做,第二种方法可能更适合,至少对于最常用的方法。
所以,我的结论是任何Java库都应该很容易转换到Clojure库。所需要的就是为它编写一个包装器。
另一个结论是可能根本不需要它。如果你想要的只是调用方法,你可能仍然只是调用方法并避免所有的架构航天。 :)
答案 1 :(得分:1)
一个可能的答案可能是字节码库,如ASM http://asm.ow2.org/
但老实说,随着时间的推移,Java中的任何库都可以用clojure编写。如果clojure使用下面的ASM,则可以复制编译为不同字节码的一些Java代码。
答案 2 :(得分:1)
我非常喜欢Clojure作为开发语言,但我发现使用Java库或编写Java代码而不是Clojure有几个很好的理由:
好消息是因为Clojure和Java之间的互操作性非常好,所以在项目中混合使用Clojure和Java代码并没有任何问题。因此,我的大部分项目都是Clojure和Java代码的混合 - 我使用最适合手头任务的项目。
答案 3 :(得分:0)
想到用于构建GUI的库。
答案 4 :(得分:0)
很多API。事实上,Clojure本身是建立在许多坚固的Java API之上的,比如java.util.Collection API。众所周知的像Incanter这样的Clojure API建立在Parallel Colt和JFreeChart等库之上。
答案 5 :(得分:0)
目前我找不到报价;但Rich表示“clojure应该尽可能使用java”的效果,而不是不必要地包装java。主要是拥抱java平台而不是对抗它。所以一般建议成为:
如果存在一个好的java库,请使用它,如果不是在clojure中写一个。