2012-04-10 51 views
1

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

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

将是所有必需的。然而,这在Clojure CLR中不起作用,编译器抱怨不了解other-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)

+0

看看http://clojure.org/libs并检查你是否在预期位置有每个名称空间/文件。如果你无法弄清楚什么是错误的,请显示(ns ..)表单,它们在文件系统中的位置以及你看到的错误。 – 2012-04-10 17:44:06

+0

您是否在首次编译该项目时遇到错误?尝试构建它,然后在REPL中加载program.clj。我唯一能想到的其他问题是你使用新的vsClojure吗? – Rob 2012-04-13 12:45:45

回答

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 \多NS> clojure.compile文件b 编译fileb到。 - 59毫秒。

当我跑了,我看到:

C:\ TEMP \多NS> C:\工具\ Clojure的-CLR-1.3.0-调试-4.0 \ fileb.exe 喜从FILEB 嗨来自filea

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

+0

我正在使用VsClojure,也许是一个错误。 – Matthew 2012-04-12 17:11:38

+0

刚刚安装了vsClojure,并且执行了与上述操作相同的操作,除了我保留了program.clj文件并在上面的示例中用它代替了fileb.clj。我没有问题。你可以发布你的代码或你的项目目录和名称空间的布局吗? – Rob 2012-04-12 17:28:35

+0

感谢@Rob,我已经更新了我的示例。 – Matthew 2012-04-12 17:36:37