有没有办法将我输入的所有源代码转储到repl会话中。我已经使用(defn ...)创建了一堆函数,但是在没有首先在文本文件(IDE)中输入它的情况下“实时”完成了它。
是否有方便的方法让源代码退出repl会话?
我注意到:
(dir user)
会给我一个类型的打印列表:
user.proxy $ java.lang.Object中
所以我似乎无法将打印列表放入Seq中以映射像'source'这样的函数。即使我可以:
(source my-defined-fn)
返回“找不到来源”...即使我亲自将其输入到repl会话中。
任何方式这样做?感谢。
答案 0 :(得分:0)
抱歉,但我怀疑答案是否定的: - /
您获得的最佳效果是在repl缓冲区中向上滚动到您定义它的位置。源函数通过查看var的元数据来查找函数代码所在的文件和行号(或上次评估它),打开文件和打印行。它看起来像这样:
...
(when-let [filepath (:file (meta v))]
(when-let [strm (.getResourceAsStream (RT/baseLoader) filepath)]
(with-open [rdr (LineNumberReader. (InputStreamReader. strm))]
(dotimes [_ (dec (:line (meta v)))] (.readLine rdr))
...
不包括元数据中的完整源代码是为了在正常情况下保存内存,但这确实使它在这里不太方便。