Nrepl.el и leiningen 2 пространство имен по умолчанию?
Как создать среду Emacs/ Clojure, теперь я сталкиваюсь с поведением, которое я не уверен в этом. В частности, когда я запускаю nREPL и компилирую (C-c C-k) мой буфер, я попадаю в нечто иное, чем пространство имен, указанное в верхней части моего файла core.clj. Я должен добавить отказ от ответственности, что я немного новичок в Clojure и пространствах имен, и поэтому мое понимание всего этого может быть мутным. Я открыт для упрямых ответов, которые показывают мне лучший способ.
Во-первых, о моей настройке:
Моя среда emacs - это Cocoa Emacs 24, созданная в основном с помощью стартового набора emacs из репозитория Melpa, с пакетами Clojure и nrepl, добавленными через диспетчер пакетов.
Мой проект leiningen 2 был настроен с помощью lein new test-clj
.
Мой project.clj:
(defproject test-clj "0.1.0-SNAPSHOT"
:description "A geospatial test app example mostly ripped off from http://datamangling.com/blog/2010/05/26/geotools-quickstart-in-clojure/"
:repositories {"osgeo-geotools" "http://download.osgeo.org/webdav/geotools"}
:url "FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.4.0"]
[org.geotools/gt-main "8.2"]
[org.geotools/gt-shapefile "8.2"]
[org.geotools/gt-epsg-hsql "8.2"]
[org.geotools/gt-swing "8.2"]])
Мой core.clj:
(ns test-clj.core
(:import [org.geotools.data CachingFeatureSource FeatureSource FileDataStore FileDataStoreFinder])
(:import [org.geotools.map DefaultMapContext MapContext])
(:import [org.geotools.swing JMapFrame])
(:import [org.geotools.swing.data JFileDataStoreChooser]))
(defn show-shapefile
"Prompts the user for a shapefile and displays its content"
[]
(if-let [shapefile (JFileDataStoreChooser/showOpenFile "shp" nil)]
(let [fs (.getFeatureSource (FileDataStoreFinder/getDataStore shapefile))]
(doto (DefaultMapContext.)
(.setTitle "Quickstart")
(.addLayer fs nil)
(JMapFrame/showMap)))))
Думаю, я должен быть в состоянии
- загрузите файл core.clj и подключаемый модуль (
M-x nrepl-jack-in
)
-
C-c C-k
, чтобы загрузить буфер в REPL
- type (show-shapefile) и быть впечатленным моей умностью
В действительности, я получаю ошибку, которая выглядит как clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: show-shapefile in this context, compiling:(NO_SOURCE_PATH:1)
Если, из REPL я первого типа (in-ns `test-clj.core), я золотой. Кроме того, если я набираю (test-clj.core/show-shapefile), я устанавливаю.
Когда я загружаю REPL в против часовой стрелки, я автоматически упаковываюсь в пространство имен test-clj.core, которое кажется удобным.
Мой вопрос тогда в два раза:
- Является ли это правильным поведением, которое я вижу? (т.е. я просто ленив?)
- Есть ли способ попасть в это пространство имен (или, наоборот, скажите мне, что это глупая идея)?
Ответы
Ответ 1
только пара изменений в вашем рабочем процессе:
- загрузите файл core.clj и вставьте его (M-x nrepl-jack-in)
- C-c C-l для загрузки файла
- C-c M-n для переключения repl в пространство имен
- type (show-shapefile) и быть впечатленным моей умностью
шаг 2 компилирует файл, который создает пространство имен
шаг 3 просто короче, чем переход на замену и запуск in-ns