Clojure中的命名空间

3
我已创建了一个示例命名空间:
[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

1
它对我有效。你的“clj”脚本里有什么? - Alex B
cat /usr/local/yaourt/clojure-git/clj: http://pastebin.com/m5064bea1 - ceth
2个回答

4

我看到有两个问题。首先,Clojure希望ns名称使用“-”字符,而文件名使用“_”字符(你实际上不能在ns名称中使用“-”或在文件名中使用“_”);因此,你需要使用

(ns shell-space)

在您的文件顶部。

其次,您的启动器脚本没有使用$CLASSPATH环境变量,而是使用$CLOJURE_CLASSPATH。根据您的偏好进行调整,一切都应该正常。

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


0

我把 shell_space.clj 移动到 CLOJURE_HOME 并且它帮助了我。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接