Может ли встроенный Swank-Clojure rep rect в программе это встроен?
Вопрос
Я пытаюсь встроить Swank-Clojure, чтобы заменять в мою приложение с целью подключения, когда приложение бежит, чтобы принудиться с вещами. Однако у меня проблемы с выяснением того, как получить доступ к ограждающей среде после запуска REFL.
Встраивание Swank-Clojure REPL достаточно легко:
(ns mytest
(:use [swank.swank :exclude [-main]])
(:gen-class))
(defn -main [& args]
(let [x 123]
(swank.swank/start-repl)))
Запустите программу. Затем в Emacs:
M-x slime-connect
Это работает нормально, и я связан. Теперь, что я надеяться было то, что это будет работать:
(println x)
;; 123 (what I was hoping for)
;; Unable to resolve symbol: x in this context (cruel reality)
Так что это не работает как способ пройти текущую среду в встроенную репре.
Есть ли путь для встроенной записи, чтобы взаимодействовать с моим запущенным программой?
Если нет, какие причины есть встроить REFL?
Если это имеет значение, я пытаюсь запустить это как банку.
Эта нить кажется связанной, но я не смог добраться от этого:
Решение
let
-ногие местные жители лексически считаются, таким образом, swank.swank/start-repl
не будет затронут let
Форма обернута вокруг звонка к нему. Тем не менее, запущенная рент будет в состоянии require
/ use
Любые пространства имен CLOJURE на классе вашего приложения (или использовать in-ns
переключить пространство имен REF для одного из них) и import
Любые классы Java на классной папе, что позволяет вам делать несколько очень полезных вещей, таких как функции переопределения, изучения и изменение содержимого любых ссылок / атомов / других интересов, проведенных в VARS, функциями вызова / Java и т. Д.
Обратите внимание, что вы, вероятно, не должны (:use swank.swank)
в твоем ns
форма; (:require swank.swank)
вместо. Разница в том, что первые тянутся во всех swank.swank
Публичные варианты в вашем пространстве имен, в то время как последний не (use = require + refer
, видеть (doc use)
и т. Д. Для деталей). Вы, кажется, используете квалифицированные именные символы пространства для доступа к Vars Swank's, чтобы вы даже не должны были изменять остаток вашего кода, а также require
избегает загромождения вашего пространства имен. В качестве альтернативы, (:use [swank.swank :only [start-repl]])
; Это тянет только start-repl
Var, который вы могли бы использовать напрямую, без swank.swank/
кусочек.