运行refresh-all后,Clojure REPL环境丢失

时间:2014-02-15 18:23:28

标签: clojure leiningen

我正在攻击我使用lein new app inclojure创建的Clojure应用。我每次启动REPL时都会预先加载一些内容,因此我创建了一个dev/user.clj文件,并在我的project.clj中提供了该文件:

(defproject inclojure "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]]
  :main ^:skip-aot inclojure.core
  :target-path "target/%s"
  :profiles {:uberjar {:aot :all}
             :dev {:source-paths ["dev"]}})

该文件大多只需要一堆垃圾,所以我可以使用简写:

(ns inclojure.core
  (:require [clojure.java.io :as io]
            [clojure.tools.namespace.repl :refer (refresh-all)])
  (:use [clojure.reflect :only [reflect]]
        [clojure.pprint :only [pprint print-table pp]]))

(defn r
  "inspect all of the properties in a java object, optionally by specifying a
  pattern"
  ([o] (r o "."))
  ([o prefix]
    (->> (reflect o :ancestors true)
         :members
         (filter #(re-find (re-pattern (str "(?i)" prefix)) (str (:name %))))
         (pprint))))

这一切都有效,但当我运行(refresh-all)时,它会丢失dev/user.clj的所有内容。有没有办法让我能够(refresh-all)dev/user.clj保留或重新加载所有内容?

似乎我可能想在inclojure.repl中创建一个特定于REPL的命名空间,如dev/user.clj,然后将其设为REPL的init-ns

0 个答案:

没有答案