具有多个名称空间的Clojure CLR

时间:2012-04-10 16:29:34

标签: clojure clojureclr

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

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

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

[编辑]另一个例子

another.clj

  (ns another)

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

program.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)

1 个答案:

答案 0 :(得分: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 \多纳秒&以及c:\工具\ Clojure的-CLR-1.3.0-调试-4.0 \ fileb.exe 你好,来自fileb 嗨来自filea

您是否正在使用vsClojure或在VS之外编写代码?