讓Emacs/Clojure環境啓動並運行,我現在遇到了我不確定的行爲是否正常。特別是,當我啓動一個nREPL並編譯(C-c C-k)我的緩衝區時,我被放入除core.clj文件頂部定義的命名空間之外的東西。我應該加上一個聲明,我對Clojure和命名空間有點新鮮,所以我對這一切的理解可能會很模糊。我願意向我展示一個更好的方式™的褒獎答案。nrepl.el和leiningen 2默認命名空間?
首先,關於我的設置:
我的emacs的環境是可可的Emacs 24,設置大多從Melpa庫emacs的入門工具包,通過包管理器添加的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- 型(顯示-shape文件),並在我的聰明才智所折服
在現實中,我得到的,看起來像clojure.lang.Compiler$CompilerException: java.lang.RuntimeException: Unable to resolve symbol: show-shapefile in this context, compiling:(NO_SOURCE_PATH:1)
錯誤
如果從REPL I第一種類型(in-ns`test-clj.core)中,我是黃金。另外,如果我輸入(test-clj.core/show-shapefile),我就設置好了。
當我在逆時針方向加載REPL時,我自動將其放入test-clj.core命名空間,這似乎很方便。然後
我的問題是雙重的:
- 這是不是我看到正確的行爲? (即我只是懶惰?)
- 有沒有辦法被放到這個命名空間(或者相反,告訴我這是一個愚蠢的想法)?
啊,優秀!看起來我可以繼續使用'C-c C-k'加載我的當前緩衝區。 「C-C M-n」似乎是魔術。除此之外:如何在StackOverflow註釋中獲得格式良好的emacs鍵盤快捷鍵? – Peter
CtrlAltDel –
Danke!我的google-fu顯然沒有找到那些。 – Peter