J'essaie d'intégrer un repli swank-clojure dans mon application dans le but de se connecter pendant que l'application est en train de courir. Cependant, j'ai de la difficulté à trouver comment accéder à l'environnement d'enfermement après avoir démarré le repl.Est-ce qu'un swank-clojure repl intégré peut accéder au programme dans lequel il est intégré?
Intégrer le Swank-Clojure REPL est assez facile:
(ns mytest
(:use [swank.swank :exclude [-main]])
(:gen-class))
(defn -main [& args]
(let [x 123]
(swank.swank/start-repl)))
Exécutez le programme .. puis sur emacs:
M-x slime-connect
Cela fonctionne très bien et je suis connecté. Maintenant, ce que je espérais était que cela fonctionnerait:
(println x)
;; 123 (what I was hoping for)
;; Unable to resolve symbol: x in this context (cruel reality)
Donc cela ne fonctionne pas comme un moyen de passer l'environnement actuel au REPL intégré.
Est-il possible que le REPL intégré interagisse avec mon programme en cours d'exécution?
Sinon, quelles sont les raisons pour intégrer un REPL?
Si cela fait une différence, j'essaye de l'exécuter en tant que JAR.
Ce fil semble lié, mais je ne pouvais arriver à quelque chose de lui:
Embedding swank-clojure in java program
Merci pour votre réponse Michal et pour avoir signalé les problèmes dans mon: use /: require use. Votre commentaire sur les espaces de noms était la clé. J'avais déjà essayé (def x) et cela ne semblait pas fonctionner * parce que mon REPL était dans le mauvais espace de noms. Pour d'autres personnes qui sont intéressées, quelque chose comme ça semble fonctionner .. (def x (atome nul)) (defn -main [& args] (faire (reset! X "123") (start-swank))) Puis exécutez, connectez slime, et dans le REPL, assurez-vous de passer à l'espace de noms de droite: (ns "quoi que") – allclaws