zoukankan      html  css  js  c++  java
  • 【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)
  • 相关阅读:
    任正非:所有公司都是管理第一,技术第二(没有一流管理,领先的技术就会退化;有一流管理,即使技术二流也会进步)
    QuickReport的OnNeedData的触发情况
    Quickreport不用数据字段,如何实现多页打印?
    我要继续做开发吗(对18个问题,全部都是肯定!)
    一台主机,至多可以开启多少个线程
    BenchmarkDotNet
    开发资源
    WebSocket
    TCP
    “在什么时候学习编程才合适?”
  • 原文地址:https://www.cnblogs.com/dajianshi/p/9675221.html
Copyright © 2011-2022 走看看