昨天开始和Clojure一起玩。 我无法解决模块系统的工作原理:
/src/clojure_first_steps
core.clj
(ns clojure-first-steps.core)
(:require [clojure-first-steps.utils :refer :all])
(defn run-other-foo
(foo-2 ["hello"]))
utils.clj
(ns clojure-first-steps.utils)
(defn foo-2 [x] (x))
尽管'lein compile'在没有probs的情况下运行,但'lein test'无法编译
(:require [clojure-first-steps.utils :refer :all])
,测试是:
(ns clojure-first-steps.core-test
(:require [clojure.test :refer :all]
[clojure-first-steps.core :refer :all]))
(deftest a-test
(testing "I can access dependecies from another module"
(is (= "hello" (run-other-foo)))))
错误讯息为java.lang.ClassNotFoundException: clojure-first-steps.utils
编辑:项目树
.
├── CHANGELOG.md
├── clojure_first_steps.iml
├── doc
│ └── intro.md
├── LICENSE
├── project.clj
├── README.md
├── resources
├── src
│ ├── clojure_first_steps
│ │ ├── core.clj
│ │ └── utils.clj
├── target
│ ├── classes
│ │ └── META-INF
│ │ └── maven
│ │ └── clojure_first_steps
│ │ └── clojure_first_steps
│ │ └── pom.properties
│ ├── repl-port
│ └── stale
│ └── leiningen.core.classpath.extract-native-dependencies
└── test
├── clojure_first_steps
│ └── core_test.clj
答案 0 :(得分:2)
在你的core.clj中:
(ns clojure-first-steps.core)
(:require [clojure-first-steps.utils :refer :all])
这是不正确的 - (:require)
子句需要在ns
宏内。因为它不是,所以向量中的符号被查找(显然没有找到)。
(ns clojure-first-steps.core
(:require [clojure-first-steps.utils :refer :all]))
这告诉Clojure编译器加载clojure-first-steps.utils
(如果还没有),并在新创建的命名空间中引用它的定义。