在REPL中使用队列文字时出现RuntimeException

时间:2017-08-10 05:02:22

标签: java clojure clojurescript leiningen read-eval-print-loop

所以我刚刚开始我的clojurescript体验,并继续使用clojurescript-unraveled网页来了解基础知识。主要是一个平稳的过程,但我使用#queue []文字遇到了麻烦。我正在使用lein repl运行Clojure 1.8.0,Java 1.8.0_112-b16和Leiningen 2.7.1。

当我输入以下内容时:

(def pq #queue [1 2 3])

我得到了这个堆栈跟踪:

RuntimeException No reader function for tag queue  
clojure.lang.LispReader$CtorReader.readTagged (LispReader.java:1245)
RuntimeException Unmatched delimiter: )  
clojure.lang.Util.runtimeException (Util.java:221)

我也尝试了#js标记文字,并获得了相同的No reader function for tag ...异常。但是,UUID和时间文字实例按预期工作,没有运行时错误。

我正在深入研究这个问题,现在正处于探索edn规范和cljs.reader实现的更广泛主题的领域,但我并没有取得很大的进展。解决原始问题。任何关于为什么会发生这种异常的见解都会非常感激。

感谢。

2 个答案:

答案 0 :(得分:3)

{1}}语法存在于clojurescript中,但不存在于JVM clojure中。您可以参考#queue [],这是一个空队列。

答案 1 :(得分:1)

#queue文字仅存在于ClojureScript中,因此具有Clojure的REPL无法解析它。两者中都存在其他(例如,#uuid)文字。由于常用文字有效,但#queue没有,这表明你实际上是在运行Clojure REPL而不是CLJS REPL。

clojurescript-unraveled 为Nashorn,Node.js或浏览器提供instructions for setting a REPL。另一种选择是使用连接到浏览器的figwheel REPL。