获取clojure中repl会话中定义的所有用户创建函数的转储
是否有一种方法可以转储我在repl会话中输入的所有源代码。我已经使用(defn…)创建了一系列函数,但是在没有首先在文本文件(IDE)中输入它们的情况下“即时”创建了这些函数 是否有一种方便的方法将源代码从repl会话中恢复 我注意到:获取clojure中repl会话中定义的所有用户创建函数的转储,clojure,Clojure,是否有一种方法可以转储我在repl会话中输入的所有源代码。我已经使用(defn…)创建了一系列函数,但是在没有首先在文本文件(IDE)中输入它们的情况下“即时”创建了这些函数 是否有一种方便的方法将源代码从repl会话中恢复 我注意到: (dir user) 将给我一份打印的类型列表: user.proxy$java.lang.Object 因此,我似乎无法将打印的列表转换为Seq,以便映射“source”之类的函数。即使我可以: (source my-defined-fn) 返回“sour
(dir user)
将给我一份打印的类型列表:
user.proxy$java.lang.Object
因此,我似乎无法将打印的列表转换为Seq,以便映射“source”之类的函数。即使我可以:
(source my-defined-fn)
返回“source not found”…即使我亲自将其输入到repl会话中
有办法吗?谢谢。对不起,我想答案是否定的:-/ 最好是在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))
...
在元数据中不包含完整的源代码是为了在正常情况下节省内存,尽管这样做会降低这里的便利性。可能重复而不是重复,该函数要求使用REPL打印.clj文件中定义的函数的源代码。这个问题是关于打印一个没有在任何文件中定义的函数的源代码(至少如果我读的是正确的话)@Arthur Ulfeldt,很公平