咱們在定義函數的時候提到了如何去定義一個元數據。但以前只是定義它,並無明說它的用途。讓咱們再看一下以前定義的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"}