咱们在定义函数的时候提到了如何去定义一个元数据。但以前只是定义它,并无明说它的用途。让咱们再看一下以前定义的select-random函数,咱们添加了一个叫作:add的元数据。注意:元数据是以哈希表形式展示的。(键和值能够是任何类型,不过key通常推荐为关键字类型) java
=>(defn select-random "从一个列表中随机返回一个元素" {:added "1.2"} ;; 元数据 [options] (nth options (rand-int (count options)))) #'user/select-random咱们可使用下面方式去查看一个函数的元数据信息(一个哈希表):
=>(meta #'select-random) {:ns @<Namespace user>@, :name select-random, :file "NO_SOURCE_PATH", :line 1, :arglists ([options]), :added "1.2", :doc "从一个列表中随机返回一个元素"}
咱们虽然只定义了一个元数据:add,可是系统却给咱们返回了一堆元数据。这些元数据是系统默认给函数添加了,主要是函数的一些基本信息。下面是一些比较重要的信息: 数据结构
下面是一些元数据的使用场合: app
一、定义函数时,能够添加对应的clojure的版本。这样一旦clojure升级,你能够系统的测试任何相关的函数。 dom
二、作一些相似java注解方面的工做。例如,若是函数已再也不使用,能够添加:state "deprecated"。 函数
三、给函数添加一些统计信息等等。 测试
咱们可不只限于只给函数添加元数据。任何能绑定变量的均可以添加元数据,例如符号或者其余数据结构。 spa
=>(def approaches (with-meta (list "ferocious" "wimpy" "precarious") {:creator "tim"})) #'user/approaches =>(meta approaches) {:creator "tim"}