Clojure не может найти .clj в локальном каталоге. и./классы на ПУТИ К КЛАССУ

Если Ваш UI включает ввод данных или управление (типичный для бизнес-приложений) тогда, я рекомендую предоставить Вашим пользователям способность действовать на наборы из элементов данных как можно больше. Также попытайтесь разработать таким способом, которым опытные пользователи могут взаимодействовать с UI в очень случайном, в противоположность последовательному пути (сочетания клавиш, гиперссылки, и т.д.).

14
задан afternoon 28 November 2009 в 11:44
поделиться

5 ответов

когда я работаю с ответом и хочу загрузить файлы, я обнаружил, что мне нужно сначала вызвать что-то вроде этого:

(add-classpath "file:///home/arthur/.../src/")
(add-classpath "file:///home/arthur/.../build/")

прежде, чем ответ сможет их найти в пути к классам. Я помещаю их в файл, который не включен в файл jar, вместе с оператором, который перезагружает все из других файлов. Когда я создаю файл jar, я обнаружил, что мне это не нужно.

2
ответ дан 1 December 2019 в 12:38
поделиться

Содержит ли hello.clj оператор (ns some-namespace) ? Если это так, то same_namespace добавляется к каждому элементу CLASSPATH перед поиском hello.clj

3
ответ дан 1 December 2019 в 12:38
поделиться

Я определил псевдоним (в .bash_profile) для загрузки REPL:

alias clojure='CLASSPATH=$HOME/git/clojure/clojure.jar:$HOME/git/clojure-contrib/clojure-contrib.jar:.:classes rlwrap java clojure.lang.Repl'
1
ответ дан 1 December 2019 в 12:38
поделиться

Если 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 (и наоборот). Не следует использовать _ в именах пространств имен и - в именах файлов.

15
ответ дан 1 December 2019 в 12:38
поделиться
[

] У меня на .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'). [

]
1
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: