阐明 ns 在包中的使用
clarify use of ns in packages
昨天开始玩 Clojure。
我不知道模块系统是如何工作的:
- 我已经安装草书
- 我已经按照 leiningen 模板创建了一个项目
- 我在
/src/clojure_first_steps
下有两个 clojure 文件
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'运行没有问题,'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
在你的core.clj中:
(ns clojure-first-steps.core)
(:require [clojure-first-steps.utils :refer :all])
这是不正确的 - (:require)
子句需要在 ns
宏中。因为不是,所以查了vector中的符号(显然没有找到)。
(ns clojure-first-steps.core
(:require [clojure-first-steps.utils :refer :all]))
这会告诉 Clojure 编译器加载 clojure-first-steps.utils
(如果尚未加载),并在您新创建的命名空间中引用它的定义。
昨天开始玩 Clojure。 我不知道模块系统是如何工作的:
- 我已经安装草书
- 我已经按照 leiningen 模板创建了一个项目
- 我在
/src/clojure_first_steps
下有两个 clojure 文件
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'运行没有问题,'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
在你的core.clj中:
(ns clojure-first-steps.core)
(:require [clojure-first-steps.utils :refer :all])
这是不正确的 - (:require)
子句需要在 ns
宏中。因为不是,所以查了vector中的符号(显然没有找到)。
(ns clojure-first-steps.core
(:require [clojure-first-steps.utils :refer :all]))
这会告诉 Clojure 编译器加载 clojure-first-steps.utils
(如果尚未加载),并在您新创建的命名空间中引用它的定义。