Clojure:运行“use”时缺少名称空间错误在 REPL
我有一个像这样开始的 .clj 文件:
(ns clojure_crawl.core)
(require '[clj-http.client :as client])
(use 'clojure.contrib.json)
后面是几个函数定义:
(defn f1 [] "" (+ 1 1))
(defn f2 [] "" (+ 2 2))
等等...
但是,当我运行命令“(use 'myfile.core :reload)”时
,我的一些函数虽然在 REPL 中可见,无法运行 do 来解决“缺少命名空间”错误。
如何添加依赖项以便 REPL 可以运行我的文件中定义的任何函数?
I have a .clj file that starts like this :
(ns clojure_crawl.core)
(require '[clj-http.client :as client])
(use 'clojure.contrib.json)
Followed by several function definitions :
(defn f1 [] "" (+ 1 1))
(defn f2 [] "" (+ 2 2))
etc...
However, when I run the command "(use 'myfile.core :reload)"
Some of my functions , although visible at the REPL, cannot run do to "missing namespace" errors.
How do I add the dependencies so that the REPL can run any of the functions defined in my file ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您的代码位于“clojure_crawl/core.clj”中,则其命名空间应为 clojure-crawl.core(注意连字符)。请参阅http://clojure.org/libs
If your code is in "clojure_crawl/core.clj", its namespace should be clojure-crawl.core (note the hyphen). See http://clojure.org/libs
正如 Joost 已经说过的,你必须小心使用连字符和下划线:无论你在命名空间名称中使用连字符,请将其替换为相应文件/目录名称中的下划线(反之亦然)。
此外,不鼓励在 clj 源文件中使用
require
和use
函数。相反,直接在ns
宏中声明您需要的库:这还需要您正确引用所需的命名空间。
As Joost already said, you have to be careful with hyphens and underscores: wherever you use a hyphen in your namespace names, replace it with an underscore in the corresponding file/directory names (and vice versa).
Also, the use of the
require
anduse
functions in clj source files is discouraged. Instead, declare the libraries you need directly in thens
macro:This also takes the burden of properly quoting the required namespaces from you.