|
|
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中轻松检索)。 |