如何获取Clojure接口及其他语法实体的文档字符串?
如何获取Clojure接口或其他语法实体的文档字符串?
你可以给函数添加文档字符串并通过meta获取,但给接口添加:doc元数据后,调用(doc Eq)会报错,报错信息翻译为:
编译/tmp/form-init4163264810453251954.clj:1:1处的var时出现语法错误。
期望是var,但Eq被映射到接口hello_leiningen.core.Eq
函数的文档字符串示例
(defn documentedFun "documentedFun is documented" [] 123) (assert (= (:doc (meta #'documentedFun)) "documentedFun"))
带文档元数据的接口定义
(definterface ^{:doc "Eq is an interface"} Eq (^{:tell bool} eq [b]) )
解决方法
- Clojure的
doc命令默认仅支持查询var的文档,而definterface创建的是Java接口,并非Clojure var,因此直接调用(doc Eq)会报错。 - 要获取接口的文档字符串,直接读取接口的元数据即可:
执行后将返回定义时设置的(:doc (meta #'Eq)):doc值"Eq is an interface"。 - 对于接口中的方法,同样可以通过方法符号的元数据获取标注信息,比如:
会返回(:tell (meta #'Eq/eq))bool。
内容的提问来源于stack exchange,提问作者Daniil Iaitskov
相关产品推荐
相关产品推荐

