12

Emacs / Clojure環境を起動して実行していると、正常かどうかわからない動作が発生します。特に、nREPLを開始してバッファーをコンパイル(Cc Ck)すると、core.cljファイルの先頭に定義されている名前空間以外の場所にドロップされます。私はClojureと名前空間に少し慣れていないという免責事項を追加する必要があります。そのため、これらすべてについての私の理解は曖昧かもしれません。私はBetterWay™を示す意見のある回答を受け入れています。

まず、私のセットアップについて:

私のemacs環境はCocoaEmacs24で、ほとんどがMelpaリポジトリのemacsスターターキットでセットアップされており、パッケージマネージャーを介してclojureパッケージとnreplパッケージが追加されています。

私のleiningen2プロジェクトは、を使用して設定されました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)))))

私はできるはずだと思います

  1. core.cljファイルとジャックインをロードします(M-x nrepl-jack-in
  2. C-c C-kバッファをREPLにロードする
  3. (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名前空間にドロップされます。これは非常に便利なようです。

私の質問は2つあります。

  1. これは私が見ている正しい動作ですか?(つまり、私はただ怠惰になっているだけですか?)
  2. この名前空間にドロップする方法はありますか(または逆に、これはばかげた考えだと言ってください)?
4

1 に答える 1

12

ワークフローにいくつか変更を加えるだけです。

  1. core.cljファイルとジャックイン(M-xnrepl-jack-in)をロードします
  2. C-c C-lファイルをロードするには
  3. c-c M-nreplを名前空間に切り替える
  4. (show-shapefile)と入力して、私の賢さに感銘を受けてください

ステップ2はファイルをコンパイルし、名前空間を作成します。
ステップ3は、replに切り替えて実行するよりも短いです。in-ns

于 2012-10-19T22:25:44.493 に答える