clojure中的命名空间

时间:2009-12-16 11:26:56

标签: clojure

我创建了示例命名空间:

[demas @arch.local.net ][~/dev/projects/diary]% cat shell_space.clj 
(ns shell_space)

(defn test_fu []
   (println "test-shell"))

如何使用命名空间中的test_fu?

我试过了:

[demas @arch.local.net ][~]% clj
Clojure 1.1.0-alpha-SNAPSHOT
user=> (require 'shell_space)
java.io.FileNotFoundException: Could not locate shell_space__init.class or shell_space.clj on classpath:  (NO_SOURCE_FILE:0)
user=> (require '/home/demas/dev/projects/diary/shell_space)
java.lang.Exception: Invalid token: /home/demas/dev/projects/diary/shell_space java.lang.Exception: Unmatched delimiter: )

这是我的CLASSPATH:

[demas @arch.local.net ][~]% echo $CLASSPATH
/home/demas/dev/projects/diary

2 个答案:

答案 0 :(得分:4)

我可以看到两个问题。首先,Clojure要求ns名称使用 - 字符,其中文件名使用_字符(你不能真正使用 - 在ns名称或_在文件名中);所以,你需要使用

(ns shell-space)

位于文件顶部。

其次,您的启动程序脚本不使用$ CLASSPATH环境变量,而是使用$ CLOJURE_CLASSPATH。根据您的喜好调整,一切都应该很好。

为了完整起见:您需要将.clj文件放在位于文件系统层次结构中类路径上的一个目录下的目录中。例如。如果你把〜/ dev / projects /日记放在你的类路径上并且文件就在那里,你应该能够(需要'shell-space)。如果文件在〜/ dev / projects / diary / shell中,你应该能够(需要'shell.shell-space)。

答案 1 :(得分:0)

我将shell_space.clj移动到CLOJURE_HOME,它对我有帮助。

 [demas @arch.local.net ][~]% cat /etc/profile.d/clojure.sh 
 export CLOJURE_HOME=/usr/share/clojure