Clojure Doto宏 - java

我将在.toUpperCase宏内调用doto方法,如下所示,但doto返回小写字母:

(doto (java.lang.String. "clojure")
       (.toUpperCase))

返回“clojure”。我进行宏扩展,并且返回值是创建的对象:(clojure.core/let [G__7359 (java.lang.String. "cojure")] (.toUpperCase G__7359) G__7359),但是为什么我没有得到大写的答案?

参考方案

doto是Clojure的Java互操作功能的一部分。它旨在使编写Java成为可能,而无需花很多钱。所以

Foo foo = new Foo;
foo.setX().setY().makeFactory().applyPhaseOfMoon();

它具有8个paren成为:

(doto foo .setY .makeFactory .applyPhaseOfMoon)

一共有两个。

在这种情况下,如果我们深入研究您的示例:

user> (doto "hi" .toUpperCase)
"hi"

扩展为:

user> (macroexpand-1 '(doto "hi" .toUpperCase))
(clojure.core/let [G__110453 "hi"]
   (.toUpperCase G__110453) 
   G__110453)

第二行执行此操作:

user> (.toUpperCase "hi")
"HI"

然后扔掉答案并从开始处返回保存的值。我个人从来没有在人们将Java转换为clojure以便调用某些API的地方以外的地方实际使用doto

Clojure Web应用程序的良好Web服务器/ Servlet容器? - java

我正在为我的compojure Web应用程序寻找一个好的生产Web服务器/ Servlet容器。使用compojure将Jetty或Tomcat或其他服务器用于Clojure Web应用程序的优缺点是什么?是否有将Web服务器与Clojure一起用于生产或工具的良好文档?我希望Web服务器灵活,易于配置,并且具有有关如何配置和使用它的良好文档。 参考方案 …

Java与Clojure的良好并发示例 - java

据说Clojure是一种使多线程编程更容易的语言。从Clojure.org网站: Clojure简化了多线程 以几种方式进行编程。现在,我正在寻找用Java和Clojure解决的非平凡问题,以便我可以比较/对比它们的简单性。任何人? 参考方案 我建议也看看克里斯托弗·格兰德(Christophe Grand)的thread safe blocking que…

Clojure / Java的分布式计算框架 - java

我正在开发一个应用程序,需要在一组可能非常大的不同计算机集群上分配一组任务。理想情况下,我希望在Clojure中使用一种非常简单,惯用的方式来执行此操作,例如就像是:; create a clustered set of machines (def my-cluster (new-cluster list-of-ip-addresses)) ; define…

Clojure中的可变序列 - java

我在clojure中有一个列表,并且(由于底层的Java库)必须修改列表(使用迭代器的remove方法)。与编写(map fn seq)的破坏性等效方法相比,是否有更优雅的方法在闭合中获得这种效果? 参考方案 Clojure列表是不可变的,因此,如果您需要可变列表,则始终可以使用Java提供的列表。例如:user=> (import java.util…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…