Questions tagged «clojure»

Clojure是Java虚拟机(带有CLR和JavaScript版本)的现代Lisp方言。Clojure不仅仅是Java中Lisp的实现,还提供了对Java类和生态系统的访问。

1
在Grails 2.0.0运行时生成的Clojure 1.2.1 / 1.3 / 1.4'代理失败。1.2.0很好
我正在扩展的Grails的Clojure插件在Grails的2.0.0(和2.1.0-SNAPSHOT),我想把它升级到Clojure的1.3.0,并添加clojure.tools.logging。 Clojure的一个编译过程中抛出一个异常 代理的ByteArrayOutputStream中clojure.tools.logging的日志流功能: ClassCastException: clojure.asm.Type cannot be cast to clojure.lang.IFn (https://gist.github.com/a6ae681c37091a3d2379) 我去和删除clojure.tools.logging,并写了一个剥离下来的代理的Object: (proxy [java.lang.Object] [] (toString [] "proxy's toString")) 它也引发了同样的ClassCastException信息。 我试图打印代理的macroexpand-1,并得到了同样的东西。 我恢复为Clojure 1.2.0,代理再次正常工作。 我尝试了多个1.4.0的版本,它们表现出与1.3.0相同的行为。1.2.1也引发了一些异常,但是我试图达到1.3.0,所以我并没有花太多时间。 堆栈跟踪指向in的let形式之一generate-proxy中定义的'gen-method函数core_proxy.clj。 我在附近添加了一个小的符号,println以查看是否可以捕获正在发生的情况。也许下一条语句会背叛我,这对读者是一个巨大的误解,但只是添加这些内容println,就以我完全没想到的方式改变了编译时的行为。即使所有Clojure测试mvn package继续通过,异常位置和异常类型也已完全更改。 例如,println在开始生成字节码之前仅在gen-method中添加一个会导致Clojure抛出 ClassCastException: clojure.lang.PersistentArrayMap cannot be cast to java.lang.Class (https://gist.github.com/5a7a40929a6c4a104bd5) 根据放置位置,我还看到了其他各种错误,println但这是最普遍的。 显然,Grails和Clojure的某些方面在此处无法正确啮合,但我看不到连接。起初,我怀疑ASM不兼容,但是由于Clojure具有自己的ASM名称空间,所以我看不出这是问题所在。但是也许我错了,我一直盯着clojure.lang.Compiler,代理和generate-proxy了好几天了,试图使它起作用,但由于动力不足,我几乎停止了前进的步伐:( 对于缺少链接,我深表歉意。您可以从下面复制和粘贴: Grails Clojure-github.com/grails-plugins/grails-clojure Clojure工具日志记录-github.com/clojure/tools.logging/blob/master/src/main/clojure/clojure/tools/logging.clj第133行是'proxy
103 grails  groovy  clojure  proxy 

6
如何在JAR内捆绑本机库和JNI库?
有问题的图书馆是东京内阁。 我想要在一个JAR文件中具有本机库,JNI库和所有Java API类,以避免重新分配的麻烦。 似乎在GitHub上有尝试,但是 它不包括实际的本机库,仅包括JNI库。 它似乎特定于Leiningen的本机依赖插件(它不能作为可再发行组件使用)。 问题是,我可以将所有内容捆绑在一个JAR中并重新分发吗?如果是,怎么办? PS:是的,我意识到这可能会带来可移植性。


12
有人可以用简单的方式向我解释Clojure换能器吗?
我曾尝试阅读此书,但我仍然不了解它们的价值或它们所替代的价值。它们会使我的代码更短,更易于理解吗? 更新资料 很多人都发布了答案,但是很高兴看到带有或不带有换能器的示例,它们非常简单,即使像我这样的白痴也可以理解。除非换能器当然需要一定程度的了解,否则我将永远不会理解它们:(


5
Clojure有什么用?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 人们将Clojure用于哪些现实应用? 我将Groovy用于胶水,将Java用于大型系统,将Python / Perl脚本用于解析和胶水。我可以看到自己从Java调用Clojure,但看不到自己将在何处使用它。令我惊讶的是,几乎所有脚本语言都可以用于临时任务。 无论如何我都不是Groovy专家或狂热爱好者,但令我惊讶的是它具有更好的支持框架,工具和许多语言结构(闭包,函数式编程)。对于Scala也可以这样说。 它的未来是否会成为嵌入在其他系统中的语言?
100 clojure 

5
Clojure:缺点(seq)与缺点(清单)
我知道这会cons返回一个seq并conj返回一个集合。我也知道,conj将项目“添加”到集合的最佳末端,并且cons始终将其“添加”到最前面。此示例说明了以下两点: user=> (conj [1 2 3] 4) ; returns a collection [1 2 3 4] user=> (cons 4 [1 2 3]) ; returns a seq (4 1 2 3) 对于矢量,地图和集合,这些差异对我来说很有意义。但是,对于列表,它们似乎相同。 user=> (conj (list 3 2 1) 4) ; returns a list (4 3 2 1) user=> (cons 4 (list 3 …

3
Java to Clojure重写
我公司刚刚要求我用Clojure重写一个大型的(50,000行单行代码)Java应用程序(使用JSP和servlet的Web应用程序)。还有其他人知道我应该注意的提示吗? 请记住,我非常了解Java和Clojure。 更新资料 我进行了重写,并投入生产。这很奇怪,因为重写的速度如此之快,以至于大约需要6周的时间。因为仍然不需要很多功能,所以最终得到了大约3000行Clojure。 我听说他们对系统及其按自己要求的方式感到满意。唯一的缺点是,维护系统的人必须从头开始学习Clojure,他被踢入脚踢并尖叫。前几天我确实接到了他的电话,说他现在爱Lisp了。 另外,我也要对Vaadin表示赞赏。使用Vaadin可能会像Clojure一样节省大量时间,并且缩短代码。(请注意,Vaadin和ClojureScript均在后台使用Google的GUI框架。)
97 java  clojure  vaadin 

14
中型Clojure样品应用程序?
是否有一个中等大小的Clojure示例应用程序可以用作“最佳实践”示例,并且是一种查看这种应用程序在代码和代码组织方面是什么样的好方法?Web应用程序对我来说尤其有趣,但最重要的是该程序执行了一些通常有用的操作(例如,博客,错误跟踪,CMS),而不是我从未真正实现过的数学操作世界(解决N皇后问题,模拟生命,生成斐波那契数列以及此类函数式编程语言的常见用法)。 谢谢!

5
如何在Clojure中将延迟序列转换为非延迟
我在Clojure中尝试了以下操作,期望返回非延迟序列的类: (.getClass (doall (take 3 (repeatedly rand)))) 但是,这仍然返回clojure.lang.LazySeq。我的猜测是,doall它会评估整个序列,但会返回原始序列,因为它对于记忆仍然有用。 那么,从懒惰序列创建非懒惰序列的惯用方法是什么?


4
Clojure与其他Lips的比较[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 我提出这个问题的目的不是发动一场火焰之战,而是确定每种语言在什么情况下是“从事这项工作的最佳工具”。 我已经阅读了几本有关Clojure的书(编程Clojure,实用Clojure,Clojure 的喜悦以及Clojure in Action的Manning早期访问版),我认为它是一种很棒的语言。我目前正在阅读Let Over Lambda,它主要处理Common Lisp宏,它也是一种非常有趣的语言。 我不是 Lisp专家(更多的是新手),但是这种语言家族和函数式编程一样,让我着迷。 Clojure的优点(和“其他”的缺点): 在JVM上运行。 JVM是一种非常稳定的高性能语言环境,完全符合Sun的梦想:“编写一次,几乎可以在任何地方运行”。我可以在Macbook Pro上编写代码,将其编译为可执行的JAR文件,然后在不进行额外测试的情况下在Linux和Microsoft Windows上运行它。 (热点和其他)JVM支持高质量的垃圾收集以及非常高效的即时编译和优化。几年前,我编写了必须在C中快速运行的所有内容,而现在我毫不犹豫地在Java中这样做。 标准,简单的多线程模型。Common Lisp是否具有标准的多线程程序包? 用[],{}和打破所有括号的单调性#{},尽管Common Lisp专家可能会告诉我,使用阅读器宏,您可以将其添加到CL中。 Clojure的缺点: 在JVM上运行。 无尾递归或连续。Common Lisp是否支持延续?我认为,计划需要两者的支持。 他人的优点(尤其是Lisp的常见缺点)(以及Clojure的缺点): 用户可定义的阅读器宏。 其他优势? 有什么想法吗?其他差异?

8
Clojure开发人员应避免的常见编程错误
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 Clojure开发人员常犯哪些常见错误,如何避免这些错误? 例如; Clojure的新手认为该contains?函数与java.util.Collection#contains。但是,contains?仅在与索引集合(如地图和集合)一起使用并且您正在寻找给定的键时,才可以类似地工作: (contains? {:a 1 :b 2} :b) ;=> true (contains? {:a 1 :b 2} 2) ;=> false (contains? #{:a 1 :b 2} :b) ;=> true 与数字索引集合(向量,数组)一起使用时,contains? 仅检查给定元素是否在索引的有效范围内(从零开始): (contains? [1 2 3 4] 4) ;=> false (contains? [1 2 3 4] 0) ;=> true 如果给出列表,contains?则永远不会返回true。
92 clojure 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.