Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取clojure中repl会话中定义的所有用户创建函数的转储_Clojure - Fatal编程技术网

获取clojure中repl会话中定义的所有用户创建函数的转储

获取clojure中repl会话中定义的所有用户创建函数的转储,clojure,Clojure,是否有一种方法可以转储我在repl会话中输入的所有源代码。我已经使用(defn…)创建了一系列函数,但是在没有首先在文本文件(IDE)中输入它们的情况下“即时”创建了这些函数 是否有一种方便的方法将源代码从repl会话中恢复 我注意到: (dir user) 将给我一份打印的类型列表: user.proxy$java.lang.Object 因此,我似乎无法将打印的列表转换为Seq,以便映射“source”之类的函数。即使我可以: (source my-defined-fn) 返回“sour

是否有一种方法可以转储我在repl会话中输入的所有源代码。我已经使用(defn…)创建了一系列函数,但是在没有首先在文本文件(IDE)中输入它们的情况下“即时”创建了这些函数

是否有一种方便的方法将源代码从repl会话中恢复

我注意到:

(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,很公平