clojure 新手指南(9):元数据

咱们在定义函数的时候提到了如何去定义一个元数据。但以前只是定义它,并无明说它的用途。让咱们再看一下以前定义的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,可是系统却给咱们返回了一堆元数据。这些元数据是系统默认给函数添加了,主要是函数的一些基本信息。下面是一些比较重要的信息: 数据结构

  1. :ns 命名空间
  2. :name 函数名
  3. :file 对应的源码文件
  4. :arglists 参数列表 (一个函数刻意包含多个参数列表(见上篇),因此是lists 而不是list)
  5. :doc 函数描述

下面是一些元数据的使用场合: app

一、定义函数时,能够添加对应的clojure的版本。这样一旦clojure升级,你能够系统的测试任何相关的函数。 dom

二、作一些相似java注解方面的工做。例如,若是函数已再也不使用,能够添加:state "deprecated"。 函数

三、给函数添加一些统计信息等等。 测试

咱们可不只限于只给函数添加元数据。任何能绑定变量的均可以添加元数据,例如符号或者其余数据结构。 spa

=>(def approaches
    (with-meta 
      (list "ferocious" "wimpy" "precarious")
      {:creator "tim"}))
#'user/approaches

=>(meta approaches)
{:creator "tim"}
相关文章
相关标签/搜索