我想知道为什么会这样.
finally并且&也以这种方式行事.哪个其他Clojure符号有这种行为,为什么?
小智 7
我相信,你已经跨过一个bug迷迷糊糊的Clojure的实现的doc影响&,catch以及finally.在当前doc实现中,这三个被特别处理,并且关联的表达式似乎缺少语法引用.
以下是一个mod to doc,它添加了语法引用并且似乎按预期工作.此函数必须放在clojure.repl命名空间中.
(defmacro doc2
[name]
(if-let [special-name ('{& fn, catch try, finally, try} name)]
`(#'print-doc (#'special-doc '~special-name))
(cond
(special-doc-map name) `(#'print-doc (#'special-doc '~name))
(find-ns name) `(#'print-doc (#'namespace-doc (find-ns '~name)))
(resolve name) `(#'print-doc (meta (var ~name))))))
Run Code Online (Sandbox Code Playgroud)
(doc catch)=> {打印trydoc并返回nil}
(doc2 catch)=> {打印trydoc并返回nil}
(with-out-str (doc catch))=> {打印trydoc并返回""}
(with-out-str (doc2 catch)) => "-------------------------\ntry\n (try expr* catch-clause* finally-clause?)\nSpecial Form\n catch-clause => (catch classname name expr*)\n finally-clause => (finally expr*)\n\n Catches and handles Java exceptions.\n\n Please see http://clojure.org/special_forms#try\n"
我将在Clojure bug追踪器上追逐它.