【问题标题】:repl/source function does not work in Clojurerepl/source 函数在 Clojure 中不起作用
【发布时间】:2017-05-05 23:17:09
【问题描述】:

我正在尝试使用不是 REPL 的文件。

这是我的 clj 文件:

tests.my-clj-file.clj

(ns tests.my-clj-file
  (:require [clojure.repl :as repl]))

(defn my-fn
  []
  1)

(println (repl/source my-fn))


输出为:

找不到来源

【问题讨论】:

  • @Josh 它在 clojure 文件中,而不是 REPL。

标签: clojure functional-programming lisp read-eval-print-loop


【解决方案1】:

只能从磁盘上的 Var 中读取源代码。

因此,如果您已经评估了缓冲区,它将加载到 REPL 中,并且您无法使用 source 查看源代码。

完成读取源代码的一种方法是将my-fn 放在另一个文件中(例如/my_other_clj_file.clj):

(ns my-other-clj-file)

(defn my-fn
  []
  1)

不评估缓冲区。

然后转到/tests/my_clj_file.clj 并评估:

(ns tests.my-clj-file
  (:require [clojure.repl :as repl]
            [other-file :refer [my-fn]))

(println (repl/source my-fn))

这确实可以正确打印源代码。

(定义我的-fn
[]
1)

【讨论】:

    【解决方案2】:

    如果你尝试(doc repl/source),你会得到这样的东西(强调):

    打印给定符号的源代码(如果可以找到)。 这要求符号解析为定义在 命名空间.clj 位于类路径中。

    所以clojure.repl/source 仅适用于从源文件加载的代码。如果在 REPL 中输入代码将不起作用(无论代码是否在文件中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-04
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多