Clojure:(不带out str(doc catch))返回&引用;
我想知道这是为什么。Clojure:(不带out str(doc catch))返回&引用;,clojure,Clojure,我想知道这是为什么。 最后和&也以这种方式运行。 其他哪些Clojure符号有这种行为?为什么?我相信您在Clojure的doc实现中偶然发现了一个bug,它会影响&,捕获,以及最终。在当前的doc实现中,对这三个表达式进行了特殊处理,并且关联的表达式似乎缺少语法引号 下面是一个mod-to-doc,它添加了语法引号,并且似乎可以按预期工作。此函数必须放在clojure.repl命名空间中 (defmacro doc2 [name] (if-let [special-name ('{&a
最后
和&
也以这种方式运行。
其他哪些Clojure符号有这种行为?为什么?我相信您在Clojure的
doc
实现中偶然发现了一个bug,它会影响&
,捕获
,以及最终
。在当前的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))))))
(doc catch)
=>{打印尝试
doc并返回nil}
(doc2 catch)
=>{printstry
doc并返回nil}
(不带str(doc catch))
=>{printstry
doc并返回“”
}
(不带str(doc2 catch))
=>“---------------------------\n try\n(try-expr*catch子句*finally子句?)\n特殊形式\n catch子句=>(catch-classname-name-expr*)\n finally子句=>(finally-expr*)\n\n捕获并处理Java异常。\n\n请参阅http://clojure.org/special_forms#try\n“
我会在Clojure bug追踪器上追查到这一点。谢谢,我没想到它们在
doc
的定义中会如此明确。