(ns com.my-company.clojure.examples.my-utils
(:import java.util.Date)
(:use [clojure.string :only (join)])
(:require [clojure.java.io :as jio]))
Clojure 定义了命名和构建库的约定。
库名称是一个符号,通常包含由句点分隔的两个或多个部分。
库的容器是一个 Java 资源,其类路径相关的路径是从库名称派生的。
路径是一个字符串。
库名称中的句点在路径中将被替换为斜杠。
库名称中的连字符在路径中将被替换为下划线。
路径可以以“.class”、“.clj”或“.cljc”结尾(请参见下面的库加载顺序)。
库以“ns”形式开头,该形式
创建与库名称相同的 Clojure 命名空间,以及
声明其对 Java 类、Clojure 的核心功能和/或其他库的依赖关系。
Clojure 确保如果对“ns”的调用完成且未抛出异常,则已满足声明的依赖关系,并且它们提供的功能可用。
一个简单的库
(ns com.my-company.clojure.examples.my-utils
(:import java.util.Date)
(:use [clojure.string :only (join)])
(:require [clojure.java.io :as jio]))
ns
形式命名库的命名空间并声明其依赖项。根据其名称,此库通常在类路径相关的路径中定义:com/my_company/clojure/examples/my_utils.clj(请注意句点到斜杠和连字符到下划线的转换)。
:import
子句声明此库对java.util.Date
的使用,并使其可以使用未限定名称在该库中的代码中可用。
:use
子句声明对clojure.string
库的依赖关系,仅用于其join
函数。join
可以在此库的代码中使用其未限定名称。
:require
子句声明对clojure.java.io
库的依赖关系,并允许使用较短的命名空间别名jio
来使用其成员。
库通常依赖于几个其他库,其完整名称共享一个共同的前缀。在对require
和use
的调用中(以及在ns
形式内的:require
和:use
子句中),可以使用前缀列表提取并提供一次公共前缀。例如,以下两种形式是等效的
(require 'clojure.contrib.def 'clojure.contrib.except 'clojure.contrib.sql)
(require '(clojure.contrib def except sql))