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

我们在定义函数的时候提到了如何去定义一个元数据。但之前只是定义它,并没有明说它的用途。让我们再看一下之前定义的select-random函数,我们添加了一个叫做:add的元数据。注意:元数据是以哈希表形式展现的。(键和值可以是任何类型,不过key一般推荐为关键字类型)

=>(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 函数描述

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

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

2、做一些类似java注解方面的工作。例如,如果函数已不再使用,可以添加:state "deprecated"。

3、给函数添加一些统计信息等等。

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

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

=>(meta approaches)
{:creator "tim"}

转载于:https://my.oschina.net/clopopo/blog/142982

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值