1
22
替代品
一个简单的
|
2
18
尽管这在REPL中不起作用,但只有在类路径的.clj文件中定义了函数的情况下才起作用。但这并不能回答你的问题:你需要一个
|
3
14
Clojure没有反编译器,所以这意味着除非是从磁盘加载的defn,否则无法获取任意函数的源。但是,您可以使用一个名为serializable fn的整洁的hack来创建一个将其源格式存储在元数据中的函数: http://github.com/Seajure/serializable-fn defsource的答案与此非常相似,但此解决方案适用于任意fn,而不仅仅是顶级defn。它也使fns在repl处打印美观,无需特殊的打印功能。 |
4
11
在clojure1.2的REPL中
$ java -cp clojure.jar clojure.main Clojure 1.2.0 user=> (source slurp) (defn slurp "Reads the file named by f using the encoding enc into a string and returns it." {:added "1.0"} ([f & opts] (let [opts (normalize-slurp-opts opts) sb (StringBuilder.)] (with-open [#^java.io.Reader r (apply jio/reader f opts)] (loop [c (.read r)] (if (neg? c) (str sb) (do (.append sb (char c)) (recur (.read r))))))))) nil user=>
其他一些函数也会自动导入REPL的
|
5
4
我最近在Clojure邮件列表上问了这个问题,答案包括重写REPL的部分以隐藏输入(和输出)以供将来参考,以及重写defn以元数据形式存储源(然后您可以在REPL中轻松检索)。 |
Freid001 · 具有最小和最大限制的架构? 6 年前 |
phlie · Hoplon With Castra加载后端时出错 6 年前 |
David Furnam · Clojure从数组中获取坐标 6 年前 |
Jeroen · 如何将惰性序列转换为映射? 6 年前 |