【问题标题】:How do I start the REPL in a user defined namespace?如何在用户定义的命名空间中启动 REPL?
【发布时间】:2012-01-08 12:30:09
【问题描述】:

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

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

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

【问题讨论】:

  • (ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)
  • 只是对格式化的快速评论。在 cygwin 控制台中简单地复制/粘贴文本应该比截屏更干净、更容易。

标签: clojure read-eval-print-loop


【解决方案1】:

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

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

【讨论】:

  • @LincolnBergeson 它仍然适用于我使用最新的 leiningen - 版本 2.7.1,以及使用 lein new app 创建的全新应用程序项目。
【解决方案2】:

如果您使用 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=>

【讨论】:

【解决方案3】:
java -cp .;clojure-1.3.0.jar; clojure.main -e \
"(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)"

【讨论】:

    【解决方案4】:

    除了Carlos' answer 建议:repl-options {:init-ns foo.bar},我还成功地将:dev {:main user} 添加到我的profile.clj。

    提供更多上下文:

    ;; /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]]))
    

    【讨论】:

      【解决方案5】:

      使用 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函数。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

          在最近的 Clojure 版本中有一个更好的方法来做到这一点:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-16
            • 2023-03-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多