首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式swank-clojure repl可以访问它嵌入的程序吗?

嵌入式swank-clojure repl可以访问它嵌入的程序吗?
EN

Stack Overflow用户
提问于 2010-06-27 05:18:13
回答 1查看 644关注 0票数 4

我正试图在我的应用程序中嵌入swank-clojure repl,以便在应用程序运行时进行连接。但是,在启动repl之后,我很难弄清楚如何访问封闭的环境。

嵌入swank-clojure REPL非常容易:

代码语言:javascript
复制
(ns mytest
  (:use [swank.swank :exclude [-main]])
  (:gen-class))

(defn -main [& args]
  (let [x 123]
    (swank.swank/start-repl)))

运行程序..。然后用电子邮件:

代码语言:javascript
复制
M-x slime-connect 

效果很好,而且我很有联系。现在,我所希望的是这能奏效:

代码语言:javascript
复制
(println x)
;; 123 (what I was hoping for)
;; Unable to resolve symbol: x in this context (cruel reality)

因此,这并不能作为将当前环境传递给嵌入式REPL的方法。

有什么方法可以让嵌入式REPL与我正在运行的程序进行交互?

如果没有,嵌入REPL的原因是什么?

如果有什么区别的话,我正试着把它作为一个罐子运行。

这条线似乎是有关联的,但我无法从中得到任何东西:

Embedding swank-clojure in java program

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-06-27 12:56:45

let-bound局部变量是在词汇上限定作用域的,因此swank.swank/start-repl不会受到围绕对它的调用包装的let表单的影响。但是,运行的REPL将能够在应用程序的类路径上require / use任何Clojure名称空间(或使用in-ns将REPL的命名空间切换到其中之一),并能够在类路径上import任何Java类,从而允许您执行许多非常有用的操作,例如重新定义函数、检查和更改任何Refs / Atoms /其他在Vars中具有兴趣的内容、调用函数/ Java方法等。

请注意,您可能不应该在(:use swank.swank)表单中使用ns;而是(:require swank.swank)。不同之处在于,前者将所有swank.swank的公共Var都引入到您的命名空间中,而后者则不会(详细信息请参见use = require + refer,参见(doc use)等)。您似乎使用命名空间限定符号来访问Swank的Var,因此您甚至可能甚至不必更改其余代码,require也可以避免混淆您的命名空间。或者,(:use [swank.swank :only [start-repl]]);这只牵扯到start-repl Var,然后您可以直接使用它,而无需使用swank.swank/比特。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3126456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档