Подтвердить что ты не робот

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, которое кажется удобным.

Мой вопрос тогда в два раза:

  • Является ли это правильным поведением, которое я вижу? (т.е. я просто ленив?)
  • Есть ли способ попасть в это пространство имен (или, наоборот, скажите мне, что это глупая идея)?
4b9b3361

Ответ 1

только пара изменений в вашем рабочем процессе:

  • загрузите файл core.clj и вставьте его (M-x nrepl-jack-in)
  • C-c C-l для загрузки файла
  • C-c M-n для переключения repl в пространство имен
  • type (show-shapefile) и быть впечатленным моей умностью

шаг 2 компилирует файл, который создает пространство имен
шаг 3 просто короче, чем переход на замену и запуск in-ns