我写了一个小命名空间来做一些数据库操作,我想从另一个命名空间中使用它。通常将文件放在同一个目录中,然后执行
(ns program (:require [other-ns :as other]) (:gen-class))
将是所有必要的。 然而,这在Clojure CLR中不起作用,编译器抱怨不知道其他ns。那么这样做的正确方法是什么? 每个命名空间都有单独的程序集?
[编辑] 另一个例子
另一个.clj
(ns another)
(defn hello [name] (str "Hello " name))
程序.clj
(ns program
(:require [another :as a])
(:gen-class))
我在 repl 中加载 program.clj 并收到以下消息:
FileNotFoundException 无法在加载路径上找到另一个 .clj.dll 或另一个 .clj。 clojure.lang.RT.load (d:\work\clojure-clr\Clojure\Clojure\Lib\RT.cs:3068)
我在同一个目录filea.clj和fileb.clj中创建了两个文件。 这是filea.clj:
(ns filea)
(defn hi []
(println "hi from filea"))
这是fileb.clj:
(ns fileb
(require [filea :as a])
(:gen-class))
(defn -main []
(println "hi from fileb")
(a/hi))
然后我切换到这些文件所在的目录并运行:
C:\temp\multi-ns>clojure.compile fileb将文件b 编译为 。-- 59毫秒。
当我运行它时,我看到:
C:\temp\multi-ns>c:\Tools\clojure-clr-1.3.0-Debug-4.0\fileb.exe来自菲勒布的嗨嗨,来自菲拉
您是在使用 vsClojure 还是在 VS 之外编写代码?