如何在用户定义的命名空间中启动REPL?

时间:2011-11-29 05:10:04

标签: clojure read-eval-print-loop

(in-ns 'dbx)写入文件并加载它并不会更改repl的默认命名空间(使用cygwin / console)。命名空间仍然是user=>,而不是dbx=>

vikrant[28] clj
Clojure 1.3.0
user=> (load-file "try1.clj")
#(Namespace dbx)
user=>

如何在脚本文件中定义的命名空间中启动REPL?

7 个答案:

答案 0 :(得分:21)

现在是:repl-options {:init-ns foo.bar}

请参阅https://github.com/technomancy/leiningen/blob/master/sample.project.clj

答案 1 :(得分:7)

如果您使用Leiningen构建项目,请将其添加到项目的project.clj文件中:

(defproject test "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.2.1"]]
  :main test.core)

src/test/core.clj文件中,添加此内容以创建test.core命名空间:

(ns test.core)

(defn -main [& args])

接下来,使用lein compile与Leiningen一起构建项目。然后输入lein repl以调用命名空间中的REPL。 REPL提示符如下所示:

test.core=>

答案 2 :(得分:1)

java -cp .;clojure-1.3.0.jar; clojure.main -e \
"(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)"

答案 3 :(得分:1)

除了Carlos' answer建议:repl-options {:init-ns foo.bar}之外,我还成功地将:dev {:main user}添加到我的个人资料中。

提供更多背景信息:

;; /foo/profile.clj
...
:main foo.core
:dev {:main user
      :source-paths ["dev"]}`
...

;; /foo/dev/user.clj
(ns user
  (:require
   [clojure.pprint :refer (pprint)]
   [clojure.repl :refer :all]
   [clojure.string :as str]
   [clojure.test :refer [run-tests run-all-tests]]
   [clojure.tools.namespace.repl :refer [refresh refresh-all]]))

答案 4 :(得分:1)

使用tools.deps的一种方法是定义别名并在其中执行某些形式:

:aliases
      {:cursive {:main-opts ["-e" "(load \"de/sveri/getless/user\")"
                             "-e" "(de.sveri.getless.user/reset)"]}

这将加载de.sveri.getless.user名称空间,然后执行de.sveri.getless.user.reset函数。

答案 5 :(得分:0)

(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)

答案 6 :(得分:0)

在最近的Clojure版本中有更好的方法:

java -cp myapp.jar clojure.main -m myapp.core