如何获取命名空间元数据?在repl中我做:
=> (in-ns my.test)
#<Namespace my.test>
=> (meta *ns*)
{:a "hello"}
=> ; Return back to repl namespace:
(in-ns 'user)
; Or use 'with-ns
我的命名空间定义是:
(ns ^{:a "hello"} my.test
...)
任何(meta #'my.test)
个变体都会失败,尽管它适用于def
个实体。我可以理解(ns...)
没有定义变量而*ns*
是一个我不能在外面引用的特殊变量,但我怀疑究竟发生了什么。
答案 0 :(得分:2)
AFAICT存在一个长期存在的问题,即传递给ns
表单的符号名称附加的元数据未正确附加到命名空间对象。
作为替代方案,您可以将其他参数传递给ns
:
(ns foo.core
"This is foo.core's excellent docstring."
{:interesting "piece of metadata"}
(:require [bar.core :as bar]))
此样式按预期工作。我也碰巧发现它更美观。
NB。引入命名对象的其他Clojure宏也倾向于以这种方式接受额外的docstring / metadata参数:
(defn foo
"A particularly lucid docstring for foo."
{:trivia "The first function named foo was written in ..."}
[]
; ...
)