Clojure: (with-out-str (doc catch)) 返回" "



我想知道为什么这是。 finally&也以这种方式行事。其他哪些Clojure符号具有此行为,为什么?

我相信您已经偶然发现了Clojure实现的doc的错误,该错误影响了&catchfinally。在当前的doc实现中,这三个是专门处理的,并且相关的表达式似乎缺少语法报价。

以下是添加语法报价的文档的mod,并且似乎按预期工作。此功能必须放置在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))))))

(doc catch) => {prints try doc并返回nil}

(doc2 catch) => {prints try doc and返回nil}

(with-out-str (doc catch)) => {prints try doc并返回 ""}

(with-out-str (doc2 catch)) => "-------------------------ntryn (try expr* catch-clause* finally-clause?)nSpecial Formn catch-clause => (catch classname name expr*)n finally-clause => (finally expr*)nn Catches and handles Java exceptions.nn Please see http://clojure.org/special_forms#tryn"

我将在Clojure错误跟踪器上追逐。

最新更新