Пространство имен в clojure - PullRequest
       18

Пространство имен в clojure

3 голосов
/ 16 декабря 2009

Я создал образец пространства имен:

[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 ]

4 голосов
/ 17 декабря 2009

Есть две проблемы, которые я вижу. Во-первых, Clojure ожидает, что имена ns будут использовать символ -, где в именах файлов используется символ _ (вы не можете использовать - в именах ns или _ в именах файлов); Итак, вам нужно использовать

(ns shell-space)

вверху вашего файла.

Во-вторых, ваш скрипт запуска не использует переменную среды $ CLASSPATH, вместо этого он использует $ CLOJURE_CLASSPATH. Отрегулируйте это по своему вкусу, и все должно быть хорошо.

Для полноты картины: вам нужно поместить этот файл .clj в каталог, который находится под одной из директорий вашего classpath в иерархии файловой системы. Например. если вы поместите ~ / dev / projects / diary в ваш путь к классам, и файл находится прямо там, вы должны иметь возможность (требуется 'shell-space). Если файл находится в ~ / dev / projects / diary / shell, вы должны иметь возможность (требуется 'shell.shell-space).

0 голосов
/ 16 декабря 2009

Я перемещаю shell_space.clj в CLOJURE_HOME, и это помогает мне.

 [demas @arch.local.net ][~]% cat /etc/profile.d/clojure.sh 
 export CLOJURE_HOME=/usr/share/clojure
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...