【Clojure 基本知识】 ns宏的 指令(关键字) requrie的用法

    指令(:require)用在(ns)之中,下面是实践中总结的几种用法(下文中省略ns宏,只是给出:require的代码):

一、导入完整名称空间。

1,最简单的形式:

(:require   clojure.data.json)

2,同时导入同一名称空间的多个子名称空间:

(:require (clj-time  core  format ))

以上这两种形式,导入了完整的名称空间,使用起来就比较麻烦了,比如调用clojure.data.json的read-str函数:

(clojure.data.json/read-str "{\"a\":1}")

 

二、使用":as"关键字,给导入的名称空间起一个别名。

(:require  [clojure.data.json :as json])

这样,调用其中函数时就可以使用这个别名而不是全路径了:

(json/read-str "{\"a\":1}")

同时导入多个包的语法:

    (:require [clj-time.core :as time]
        [clj-time.format :as timef]
        [clojure.data.json :as json]
    )

对于上面clj-time这种情况,导入多个子名称空间,可以这样:

 (:require (clj-time [core :as time][format :as timef]) )

 

三、使用":refer"关键字,直接导入要使用的符号名称(这种语法一般适用于仅需要使用的名称空间中有限几个符号的情况)。

例如只导入一个:

(:require  [clojure.data.json :refer read-str])

此时,“read-str”直接位于当前的名称空间,可以直接使用:

(read-str "{\"a\":1}")

同时导入多个符号名称:

(:require  [clojure.data.json :refer [read-str write-str] ])

还可以使用":all"关键字,这样就和(use)宏的效果一样了,把名称空间下的所有符号直接导入到当前名称空间,这是不推荐的,很容易引起冲突!例如:

user=> (:require  [clojure.data.json :refer :all])
IllegalStateException pprint already refers to: #'clojure.pprint/pprint in namespace: user  clojure.lang.Namespace.warnOrFailOnReplace (Namespace.java:88)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值