Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:(不带out str(doc catch))返回&引用;_Clojure - Fatal编程技术网

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)
=>{prints
try
doc并返回nil}

(不带str(doc catch))
=>{prints
try
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
的定义中会如此明确。