1

我写了一个小的命名空间来做一些数据库操作,我想在另一个命名空间中使用它。通常将文件放在同一目录中,然后执行

(ns program (:require [other-ns :as other]) (:gen-class))

将是所有必要的。然而,这在 Clojure CLR 中不起作用,编译器抱怨不知道 other-ns。那么这样做的正确方法是什么?每个命名空间都有一个单独的程序集?

[编辑] 另一个例子

另一个.clj

  (ns another)

  (defn hello [name] (str "Hello " name))

程序.clj

  (ns program
    (:require [another :as a])
    (:gen-class))

我在 repl 中加载 program.clj 并收到以下消息:

FileNotFoundException 无法在加载路径上找到 another.clj.dll 或 another.clj。clojure.lang.RT.load (d:\work\clojure-clr\Clojure\Clojure\Lib\RT.cs:3068)

4

1 回答 1

0

我在同一个目录 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 将 fileb 编译为 . -- 59 毫秒。

当我运行它时,我看到:

C:\temp\multi-ns>c:\Tools\clojure-clr-1.3.0-Debug-4.0\fileb.exe hi from fileb hi from filea

您是在使用 vsClojure 还是在 VS 之外编写代码?

于 2012-04-11T11:11:56.590 回答