Clojure:在REPL上运行“use”时缺少命名空间错误

时间:2012-01-19 04:00:35

标签: namespaces clojure read-eval-print-loop

我有一个如下所示的.clj文件:

(ns clojure_crawl.core)
(require '[clj-http.client :as client])
(use 'clojure.contrib.json)

接下来是几个函数定义:

(defn f1 [] "" (+ 1 1))

(defn f2 [] "" (+ 2 2))
等等......

但是,当我运行命令“(使用'myfile.core:reload)”

我的一些函数虽然在REPL中可见,却无法运行“遗失命名空间”错误。

如何添加依赖项以便REPL可以运行我的文件中定义的任何函数?

2 个答案:

答案 0 :(得分:5)

如果您的代码位于“clojure_crawl / core.clj”中,则其命名空间应为clojure-crawl.core(请注意连字符)。见http://clojure.org/libs

答案 1 :(得分:3)

正如Joost所说,你必须小心使用连字符和下划线:无论你在命名空间名称中使用连字符,在相应的文件/目录名称中用下划线替换它(反之亦然)。

此外,不鼓励在clj源文件中使用requireuse函数。相反,直接在ns宏中声明所需的库:

(ns clojure-crawl.core
  (:require [clj-http.client :as client])
  (:use clojure.contrib.json))

这也需要正确引用您所需的命名空间。