gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:00:42 25 4
gpt4 key购买 nike

我正在尝试将 swank-clojure repl 嵌入到我的应用程序中,以便在应用程序运行时进行连接以解决问题。但是,我在启动 repl 后无法弄清楚如何访问封闭环境。

嵌入 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)

所以这不能作为将当前环境传递给嵌入式 REPL 的一种方式。

嵌入式 REPL 有没有办法与我正在运行的程序进行交互?

如果不是,有什么理由嵌入 REPL?

如果有什么不同,我正在尝试将其作为 JAR 运行。

该线程似乎相关,但我无法从中获得任何信息:

Embedding swank-clojure in java program

最佳答案

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的公共(public)变量进入您的命名空间,而后者没有( use = require + refer ,请参阅 (doc use) 等了解详细信息)。您似乎使用命名空间限定符号来访问 Swank 的变量,因此您甚至可能不必更改其余代码,并且 require避免弄乱你的命名空间。或者,(:use [swank.swank :only [start-repl]]) ;这只会引入 start-repl var,然后您可以直接使用它,而无需 swank.swank/少量。

关于clojure - 嵌入式 swank-clojure repl 可以访问它嵌入的程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3126456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com