Clojure Lein REPL无法打开

3
我一直在尝试将Clojure配置成使用Overtone。
然而,当我试图在项目文件夹中启动Lein时,我收到了以下错误信息:
Exception in thread "main" java.lang.Exception: EOF while reading string (project.clj:5)
    at clojure.lang.Compiler.load(Compiler.java:5864)
    at clojure.lang.Compiler.loadFile(Compiler.java:5821)
    at clojure.lang.RT$3.invoke(RT.java:296)
    at leiningen.core$read_project$fn__2128.invoke(core.clj:127)
    at leiningen.core$read_project.invoke(core.clj:126)
    at leiningen.core$read_project.invoke(core.clj:130)
    at leiningen.core$_main.doInvoke(core.clj:320)
    at clojure.lang.RestFn.invoke(RestFn.java:410)
    at clojure.lang.AFn.applyToHelper(AFn.java:161)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invoke(core.clj:542)
    at leiningen.core$_main.invoke(core.clj:332)
    at user$eval42.invoke(NO_SOURCE_FILE:1)
    at clojure.lang.Compiler.eval(Compiler.java:5425)
    at clojure.lang.Compiler.eval(Compiler.java:5392)
    at clojure.core$eval.invoke(core.clj:2382)
    at clojure.main$eval_opt.invoke(main.clj:235)
    at clojure.main$initialize.invoke(main.clj:254)
    at clojure.main$script_opt.invoke(main.clj:270)
    at clojure.main$main.doInvoke(main.clj:354)
    at clojure.lang.RestFn.invoke(RestFn.java:436)
    at clojure.lang.Var.invoke(Var.java:373)
    at clojure.lang.AFn.applyToHelper(AFn.java:167)
    at clojure.lang.Var.applyTo(Var.java:482)
    at clojure.main.main(main.java:37)
Caused by: java.lang.Exception: EOF while reading string
    at clojure.lang.LispReader$StringReader.invoke(LispReader.java:407)
    at clojure.lang.LispReader.readDelimitedList(LispReader.java:1051)
    at clojure.lang.LispReader$VectorReader.invoke(LispReader.java:998)
    at clojure.lang.LispReader.readDelimitedList(LispReader.java:1051)
    at clojure.lang.LispReader$VectorReader.invoke(LispReader.java:998)
    at clojure.lang.LispReader.readDelimitedList(LispReader.java:1051)
    at clojure.lang.LispReader$ListReader.invoke(LispReader.java:900)
    at clojure.lang.LispReader.read(LispReader.java:145)
    at clojure.lang.Compiler.load(Compiler.java:5854)
    ... 24 more

我已确定原因不是由于括号不匹配。我在互联网上搜索并发现这个。看起来人们通过从JRE切换到JDK来解决问题。请注意,他们讨论的是Windows。

我使用的是Ubuntu Linux,从未在Java中开发过。我只略懂不同的Java技术。有谁能帮我解决这个问题吗?这真的太好了。我正在尝试开始学习“如此美妙”的Clojure。(它很棒,没有讽刺意味。)

问题2:我非常新手Clojure。我在大学期间使用Scheme进行SICP时决定转向一种更现代的LISP方言。我熟悉语法但想知道Clojure是否与“Java生态系统”密切相关?我知道它在一般意义上与Java相关;但你们Clojure程序员感觉像是在Java中添加了括号或Clojure确实是在JVM上运行的生态系统?我曾经对它寄予厚望,但遇到如此与Java相关的问题后,我感到非常失望。

这是project.clj(感谢提醒@Arthur Ulfeldt):

    (defproject tutorial "1.0"
        :dependencies [ [org.clojure/clojure "1.5.1"]
                        [overtone "0.8.1"] ])

这段内容来自Overtone的“入门指南”部分。

你最好一次只问一个问题。Clojure不仅在API方面与Java有关,而且它部分是用Java编写的,因此如果你正在做相对低级别的东西,你可能需要了解Java。此外,显然理解Java运行时的内容(如字节码、垃圾回收、JIT、反射等)会有所帮助。 - om-nom-nom
2
你能包含project.clj的内容吗?这将有助于调试。 - Arthur Ulfeldt
这个project.clj文件里面并没有五行代码,可能是文件没有保存? - Arthur Ulfeldt
我再次复制粘贴以确保...还是不行,我会升级我的SDK、Lein并查看是否有效。显然这对一些人有用。 - Roald
如果那确实是你的project.clj,我预计会有隐藏的非打印Unicode字符。这个错误不是Java错误,它只是暴露了一些Java实现细节的错误。Clojure解析器到达了你三行代码文件的第五行,并且一个已经打开的字符串没有被关闭。 - noisesmith
2个回答

4

问题2:

Clojure是一种托管语言,其核心理念之一是< b>拥抱平台。在简单的情况下使用现有的Java库是惯用的方式,并在它们使事情变得复杂时进行包装或替换。我发现Clojure是学习Java生态系统的绝佳途径。其他的驱动原则是保持事物分离和简单,以及适当地跟踪身份和时间。


所以这就像使用MacRuby进行编程?你必须学习Objective C框架。谢谢。 - Roald
1
现在我明白为什么问题应该分开问了 ;) - Roald
它在我的Mac上运行良好(赞Mac!),所以我将关闭问题。感谢您的回答。 - Roald

3

根据堆栈信息,我认为你的project.clj文件看起来像:

(defproject whatever "1.0"
  :dependencies [[something "1.0]])

基本上,你缺少一个字符串的闭合引号,并且该字符串嵌套在两个向量中。最有可能的是:dependencies,但也可能在其他地方。问题很可能出现在project.clj的第5行,所以从那里开始查找。


抱歉之前没有包含 projectl.clj 文件!请原谅! - Roald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接