我创建了示例命名空间:
[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
答案 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