具有多个名称空间的Clojure CLR
我编写了一个小名称空间来执行一些数据库操作,我想从另一个名称空间中使用它。通常将文件放在同一目录中,然后执行具有多个名称空间的Clojure CLR,clojure,clojureclr,Clojure,Clojureclr,我编写了一个小名称空间来执行一些数据库操作,我想从另一个名称空间中使用它。通常将文件放在同一目录中,然后执行 (ns program (:require [other-ns :as other]) (:gen-class)) 这是所有必要的。然而,这在Clojure CLR中不起作用,编译器抱怨不知道其他ns。那么,正确的方法是什么呢?每个名称空间都有一个单独的程序集 [编辑]另一个例子 另一个.clj (ns another) (defn hello [name] (str "He
(ns program (:require [other-ns :as other]) (:gen-class))
这是所有必要的。然而,这在Clojure CLR中不起作用,编译器抱怨不知道其他ns。那么,正确的方法是什么呢?每个名称空间都有一个单独的程序集
[编辑]另一个例子
另一个.clj
(ns another)
(defn hello [name] (str "Hello " name))
program.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文件B
正在将文件B编译为。-59毫秒
当我运行它时,我看到:
C:\temp\multi-ns>C:\Tools\clojure-clr-1.3.0-Debug-4.0\fileb.exe
你好,来自fileb
你好,来自菲拉
您是在使用vsClojure还是在VS之外编写代码?查看并检查您是否将每个名称空间/文件都放在了预期的位置。如果您无法找出错误所在,请显示(ns..)表单、它们在文件系统中的位置以及您看到的错误。您在首次编译项目时是否收到错误?尝试构建它,然后在REPL中加载program.clj。我能想到的另一件事是,你在使用新的vsClojure吗?我在使用vsClojure,可能是那里的一个bug。刚刚安装了vsClojure,做了与上面相同的事情,只是保留了program.clj文件,并在上面的示例中用它代替了fileb.clj。我没有问题。您可以发布您的代码或项目目录和名称空间的布局吗?