【发布时间】:2011-09-20 14:20:10
【问题描述】:
我正在尝试使用 Clojure doc 函数获取文档,但无法从 REPL 中识别它(我正在使用 Emacs 和 SLIME)。以下序列描述了发生了什么(错误消息紧跟在每一行之后):
gaidica.core> (doc first)
; Evaluation aborted.
Unable to resolve symbol: doc in this context
[Thrown class java.lang.Exception]
gaidica.core> (clojure.core/doc first)
; Evaluation aborted.
No such var: clojure.core/doc
[Thrown class java.lang.Exception]
user> (clojure.core/doc first)
; Evaluation aborted.
No such var: clojure.core/doc
[Thrown class java.lang.Exception]
user> (doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
user>
如何引用doc 函数并将其识别为函数而不是变量?
附录,2011 年 6 月 22 日,问题发布后 9 小时
@kotarak 发表了最相关的评论:“注意,clojure.core/doc 是 1.2 及更早版本。clojure.repl/doc 是 1.3 及更高版本。”果然,以下方法奏效了:
user> (clojure.repl/doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
user>
我能够确认 Clojure 1.3 处于活动状态:
user> *clojure-version*
{:interim true, :major 1, :minor 3, :incremental 0, :qualifier "master"}
user>
但这也令人困惑——我的 Leiningen project.clj 指定了 Clojure 1.2!
根据我自己的经验,我曾经注意到,即使在我更改了相关目录的内容之后,基于 SLIME 的 REPL 也会“挂在”Java 类路径值上。解决方案是退出 Emacs 和 lein swank,然后重新输入两者并重试。我也试过了,结果如下:
user> *clojure-version*
{:major 1, :minor 2, :incremental 0, :qualifier ""}
user>
我能得出的唯一结论是我之前的 REPL 一直在使用 Clojure 1.3。我之前参与的项目使用了 Clojure 1.3 快照,所以我猜测 REPL 以某种方式“挂在”Clojure 1.3 上。
问题已解决,经验教训等。对于加分,任何人都可以解释发生的原因(Clojure 1.2 与 1.3)吗?
感谢所有做出贡献的人。
【问题讨论】:
-
我注意到您尚未接受任何问题的答案。如果您认为它们足够,您绝对应该接受一些答案。这就是 stackoverflow 网站的工作方式。
-
@kotarak 和@bmillare:请阅读我的问题和两个答案。我想你会同意,尽管这两个答案都试图有所帮助,但都没有回答我的问题。 那也是我没有接受的原因。
-
@gregg-williams 对于您的所有其他问题当然也是如此,无论您提出的解决方案是否有帮助,您都没有提供任何反馈。
-
@gregg 我已经更新了我的回复。我更明确,假设更少。如果还不清楚,请反馈。
-
@kotarak,我误读了您的原始评论。感谢您指出我没有选择前两个问题的答案。从那以后我就这样做了,感谢您指出问题所在;我确实想成为一个好公民。谢谢。
标签: emacs clojure read-eval-print-loop slime