Если Ваш UI включает ввод данных или управление (типичный для бизнес-приложений) тогда, я рекомендую предоставить Вашим пользователям способность действовать на наборы из элементов данных как можно больше. Также попытайтесь разработать таким способом, которым опытные пользователи могут взаимодействовать с UI в очень случайном, в противоположность последовательному пути (сочетания клавиш, гиперссылки, и т.д.).
когда я работаю с ответом и хочу загрузить файлы, я обнаружил, что мне нужно сначала вызвать что-то вроде этого:
(add-classpath "file:///home/arthur/.../src/")
(add-classpath "file:///home/arthur/.../build/")
прежде, чем ответ сможет их найти в пути к классам. Я помещаю их в файл, который не включен в файл jar, вместе с оператором, который перезагружает все из других файлов. Когда я создаю файл jar, я обнаружил, что мне это не нужно.
Содержит ли hello.clj оператор (ns some-namespace)
? Если это так, то same_namespace
добавляется к каждому элементу CLASSPATH перед поиском hello.clj
Я определил псевдоним (в .bash_profile) для загрузки REPL:
alias clojure='CLASSPATH=$HOME/git/clojure/clojure.jar:$HOME/git/clojure-contrib/clojure-contrib.jar:.:classes rlwrap java clojure.lang.Repl'
Если hello.clj
находится в $ DIR
и $ DIR
находится в вашем пути к классам, тогда hello.clj
необходимо запустить с (нс привет)
. Если он находится в $ DIR / $ SUBDIR
и $ DIR
находится в вашем пути к классам, то hello.clj должен начинаться с (ns $ SUBDIR.hello)
. Как правило, структура вашего имени файла и структура имени ns должны совпадать, при этом разделитель имен файлов заменяется на .
в имени ns и любых _
s в имени файла, соответствующих -
s в имени ns. Имя фактического файла должно быть последним компонентом (возможно, единственным компонентом, если каталог, содержащий файл, находится в пути к классам) имени пространства имен.
РЕДАКТИРОВАТЬ:
Расширенный пример. Никакой информации, кроме того, что я написал выше, так что, пожалуйста, пропустите это, если вам этого было достаточно; однако я знаю, что получение правильного CP было довольно болезненным для меня вначале, поэтому я решил написать это поэтапно, чтобы кто-то где-нибудь, возможно, был избавлен от этого особого «опыта обучения» ;-).
Скажем, это ваше определение пространства имен:
;;; in file "hello.clj"
(ns hello)
(defn hello []
(println "Hello!"))
Затем, если вы поместите каталог, содержащий hello.clj
, в свой путь к классам, все будет хорошо и (используйте 'hello)
в REPL должен делать то, что вы хотите.
Если, с другой стороны, вы сделаете это:
;;; in file "hello.clj"
(ns my-namespace)
;;; ...
или это:
;;; in file "my-filename.clj"
(ns hello)
;;; ...
- то есть, если вы введете несоответствие между именем файла и имя пространства имен, Clojure не сможет найти ваше пространство имен.
Кроме того, если вы поместите hello.clj
в / path / to / code
, но то, что у вас есть в вашем пути к классам, на самом деле / path / to
, то есть родительский каталог / path / to / code
, вам нужно сделать это:
;;; in file "/path/to/code/hello.clj"
(ns code.hello)
;;; ...
Затем вы ' я смогу (использовать 'code.hello)
.
Наконец, если вы вызовете свой файл my_namespace.clj
, вам нужно будет вызвать свое ns my-namespace
(и наоборот). Не следует использовать _
в именах пространств имен и -
в именах файлов.
] У меня на .emacs следующие строки: [
] [(setq swank-clojure-jar-path "~/src/clojure/clojure.jar"
swank-clojure-extra-classpaths (append
(directory-files "~/src/compojure/deps" t ".jar$")
(list
"~/src/swank-clojure/src/main/clojure"
"~/src/clojure-contrib/clojure-contrib.jar"
"~/src/clj/.")))
]
[]Я загружаю программу snake.clj, которая находится в ~/src/clj и оцениваю ее (C-x h, которая выбирает весь буфер, а затем C-c C-c для компиляции). Программы создают пространство имен по имени snake. Теперь, из emacs/slime, я делаю[
] [(use 'snake)
]
[]That's it.Now вызываю любую функцию, определенную в пространстве имён.[
] []Ваша проблема может заключаться в том, что каталог, в котором у вас есть hello.clj, может не находиться на вашем клас-спате. Также убедитесь, что вы назвали пространство имен правильно. Если внутри hello.clj вы назвали пространство имён как hello, то вы это сделали (используйте 'hello'). [
]