【问题标题】:Clojure : missing namespace errors when running "use" at the REPLClojure:在 REPL 上运行“use”时缺少命名空间错误
【发布时间】:2012-01-19 04:00:35
【问题描述】:

我有一个这样开头的 .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 中可见,但无法运行“缺少命名空间”错误。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      正如 Joost 已经说过的,您必须小心使用连字符和下划线:无论您在命名空间名称中使用连字符的任何位置,都应在相应的文件/目录名称中将其替换为下划线(反之亦然)。

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

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

      这也承担了从您那里正确引用所需命名空间的负担。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-02
        • 1970-01-01
        相关资源
        最近更新 更多