Clojure语言十二: namespace

当前namespace

*ns* 指向的是当前namespace,通常是user. 不过如果在自己应用程序,比如我的my-website目录下运行lein repl,然后在运行*ns*,得到的当前namespace就不不是user,而是:

my-website.server=> *ns*
#<Namespace my-website.server>

创建namespace

有几种方法,最简单的是用ns宏。

下面创建了一个文件config.clj

(ns my-website.config)

(def load_config (fn [name] (load-file (str "/opt/" name))))

(def host 
  (fn [name] (:mongodb (load_config name))))

这里创建了一个namespace 名叫my-website.config, 里面包含了两个Vars. 一个是函数load_config,用来读取/opt/目录下的配置文件,一个是函数host,用来取配置文件中的key为:mongodb的值。


如何使用呢?在test.clj文件中:

(ns my-website.rest.test
  (:require [noir.response :as response])
  (:use [noir.core :only [defpage]])
  (:use [my-website.config :as config]))

(defpage "/rest/:id" {:keys [id]} (response/json {:userId id}))

(defpage "/rest/file/:name" {:keys [name]} (str "mongodb host: " (config/host name)
最后一个:use语句引入这个namespace, 并且起了别名为config,

然后调用host函数就可用(config/host ...)


namespace还有很多细节。以后会更新,不过目前能够帮助我将代码按照namespace的方式写在不同的文件中。


你可能感兴趣的:(Clojure语言十二: namespace)