Clojure: пропущены ошибки пространства имен при запуске «use» в REPL - PullRequest
1 голос
/ 19 января 2012

У меня есть файл .clj, который начинается так:

(ns clojure_crawl.core)
(require '[clj-http.client :as client])
(use 'clojure.contrib.json)

Далее следуют несколько определений функций:

(defn f1 [] "" (+ 1 1))

(defn f2 [] "" (+ 2 2))

и т.д ...

Однако, когда я запускаю команду "(используйте 'myfile.core: reload)"

Некоторые из моих функций, хотя они видны в REPL, не могут работать с ошибками «отсутствует пространство имен».

Как мне добавить зависимости, чтобы REPL мог запускать любые функции, определенные в моем файле?

Ответы [ 2 ]

5 голосов
/ 19 января 2012

Если ваш код находится в «clojure_crawl / core.clj», его пространство имен должно быть clojure-crawl.core (обратите внимание на дефис). Смотри http://clojure.org/libs

3 голосов
/ 19 января 2012

Как уже сказал Joost, вы должны быть осторожны с дефисами и подчеркиванием: везде, где вы используете дефис в именах вашего пространства имен, заменяйте его подчеркиванием в соответствующих именах файлов / каталогов (и наоборот).

Кроме того, использование функций require и use в исходных файлах clj не рекомендуется. Вместо этого объявите нужные библиотеки непосредственно в макросе ns:

(ns clojure-crawl.core
  (:require [clj-http.client :as client])
  (:use clojure.contrib.json))

Это также берет на себя бремя правильного цитирования требуемых пространств имен от вас.

...