Как запустить REPL в определенном пользователем пространстве имен? - PullRequest
11 голосов
/ 29 ноября 2011

Запись (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 ]

21 голосов
/ 23 июня 2014

В наше время это :repl-options {:init-ns foo.bar}.

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

7 голосов
/ 29 ноября 2011

Если вы используете 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])

Затем создайте свой проект с помощью Leiningen с помощью lein compile. Затем введите lein repl, чтобы вызвать REPL в вашем пространстве имен. Приглашение REPL будет выглядеть следующим образом:

test.core=>
1 голос
/ 06 июня 2019

Одним из способов использования 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.

1 голос
/ 12 мая 2015

В дополнение к ответу Карлоса с предложением :repl-options {:init-ns foo.bar} я также успешно добавил :dev {:main user} в свой профиль.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]]))
1 голос
/ 29 ноября 2011
java -cp .;clojure-1.3.0.jar; clojure.main -e \
"(ns dbx) (clojure.main/repl) (in-ns 'dbx) (clojure.core/use 'clojure.core)"
0 голосов
/ 28 марта 2015

В последних версиях Clojure есть намного лучший способ сделать это:

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

0 голосов
/ 30 ноября 2011

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

...