defn定义的clojure函数的属性映射是什么?

defn定义的clojure函数的属性映射是什么?,clojure,ring,Clojure,Ring,作为clojure的初学者,我正在阅读clojure代码以熟悉clojure的语法。 下面的代码段是Ring项目中的一个函数 (defn- request-context "Create an UploadContext object from a request map." {:tag UploadContext} [request encoding] (reify UploadContext (getContentType [this] (get-in request [:hea

作为clojure的初学者,我正在阅读clojure代码以熟悉clojure的语法。 下面的代码段是Ring项目中的一个函数

(defn- request-context
"Create an UploadContext object from a request map."
{:tag UploadContext}
[request encoding]
(reify UploadContext
(getContentType [this]       (get-in request [:headers "content-type"]))
(getContentLength [this]     (or (req/content-length request) -1))
(contentLength [this]        (or (req/content-length request) -1))
(getCharacterEncoding [this] encoding)
(getInputStream [this]       (:body request))))
我不清楚的是线路

{:tag UploadContext}
如果要查看clojure函数的定义

(defn function-name doc-string? attr-map? [parameter-list]
conditions-map?
(expressions))
我猜(但不确定)地图应该是“attr地图”。但是什么是“属性映射”?我在谷歌上搜索,找不到好的解释

任何介绍“attr地图”的示例或链接都将不胜感激。我还想知道在我粘贴的代码中如何使用attr映射。

将(可选的)
attr映射?
传递到
defn
是向函数的变量添加元数据的一种简捷方法

元数据可能包括诸如
:tag
(运行时返回类型)、
:doc
(文档字符串)和
:private
(指示变量是否对命名空间专用)等条目。附加的元数据也可以附加到那里,但是应该用于与数据的逻辑值正交的数据

(defn{:标记字符串:其他元数据5}[name](格式为“Hello,%s”name))
(meta#f)
;=> {:arglists([name]),:ns#,:name f,:end column 8,:column 1,
:第4行:其他元数据5,:文件“无源文件”,:结束第4行,
:tag java.lang.String}

谢谢,丹尼尔。你能分享一些关于attr地图的链接吗?你可以在顶部阅读一些关于元数据的内容。(
attr map?
只是合并到函数变量元数据中的数据映射的参数名)。元数据使用值可能因开发人员而异。你自以为是地使用“应该”一词,并不是在引语“与数据的逻辑值正交”的原始上下文中。不加入这种偏见可能会提高你答案的质量。
(defn greet {:tag String :other-meta-data 5} [name] (format "Hello, %s" name))

(meta #'f)
;=> {:arglists ([name]), :ns #<Namespace user>, :name f, :end-column 8, :column 1,
     :line 4 :other-meta-data 5, :file "NO_SOURCE_FILE", :end-line 4, 
     :tag java.lang.String}