2012-10-19 6 views
12

Uzyskanie działającego środowiska Emacs/Clojure, mam teraz działanie, którego nie jestem pewien. W szczególności, kiedy uruchamiam nREPL i kompiluję (C-c C-k) mój bufor, dostaję zrzut do czegoś innego niż przestrzeń nazw zdefiniowana na górze mojego pliku core.clj. Powinienem dodać zastrzeżenie, że jestem trochę nowy w Clojure i przestrzeniach nazw, więc moje zrozumienie tego wszystkiego może być mroczne. Jestem otwarty na pozytywne opinie, które pokazują mi Better Way ™.nrepl.el i leiningen 2 domyślna przestrzeń nazw?

pierwsze, o mojej konfiguracji:

Moje środowisko Emacs Cocoa Emacs 24, utworzonego głównie z zestawem startowym emacs z repozytorium Melpa, z pakietami Clojure i nrepl dodanych przez menedżera pakietów.

Mój projekt Leiningen 2 został skonfigurowany przy użyciu lein new test-clj.

Moja 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"]]) 

Moja 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))))) 

myślę powinienem móc

  1. obciążenia moje plik core.clj i Jack-in (M-x nrepl-jack-in)
  2. C-c C-k załadować bufor do REPL
  3. typu (show-Shapefile) i być pod wrażeniem mojego sprytu

W rzeczywistości, pojawia się błąd, który wygląda jak clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: show-shapefile in this context, compiling:(NO_SOURCE_PATH:1)

Jeśli z REPL I najpierw wpiszę (in-ns `test-clj.core), jestem złoty. Ponadto, jeśli piszę (test-clj.core/show-shapefile), jestem ustawiony.

Po załadowaniu REPL w kierunku przeciwnym do ruchu wskazówek zegara, automagicznie dostaję się do przestrzeni nazw test-clj.core, co wydaje się bardzo wygodne.

Moje pytanie czym jest dwojaki:

  1. Jest to poprawne zachowanie, które ja widzę? (po prostu jestem leniwy?)
  2. Czy istnieje sposób, aby zostać wpuszczonym w tę przestrzeń nazw (lub odwrotnie, powiedz mi, że to głupi pomysł)?

Odpowiedz

12

zaledwie kilka zmian w przepływie pracy:

  1. obciążenie aż mój rdzeń.Plik CLJ i wejście w (Mx nrepl jack w)
  2. DWCl załadowania pliku
  3. mlMn przełączyć rEPL do nazw
  4. typu (show-shapefile) i być pod wrażeniem mojej sprytu.

krok 2 kompiluje plik, który tworzy przestrzeń nazw
krok 3 jest tylko krótszy niż przełączenie na replikowanie i działanie in-ns

+1

Ah, doskonale! Wygląda na to, że mogę dalej ładować mój bieżący bufor również za pomocą 'C-c C-k'. "C-c M-n" wydaje się być magią. Na marginesie: Jak uzyskać ładnie sformatowane skróty klawiaturowe emacs w komentarzach StackOverflow? – Peter

+1

CtrlAltDel

+0

Danke! Mojego google-fu najwyraźniej brakowało w znalezieniu tych. – Peter