Clojure: отсутствующие ошибки пространства имен при использовании в REPL

У меня есть файл .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 мог выполнять любую из функций, определенных в моем файле?


person jayunit100    schedule 19.01.2012    source источник


Ответы (2)


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

person Joost Diepenmaat    schedule 19.01.2012

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

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

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

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

person Christian Berg    schedule 19.01.2012