代码之家  ›  专栏  ›  技术社区  ›  allclaws

嵌入式swank clojure repl能否访问它所嵌入的程序?

  •  4
  • allclaws  · 技术社区  · 14 年前

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

    如果有什么不同的话,我试着把它当作一个罐子来运行。

    Embedding swank-clojure in java program

    1 回复  |  直到 7 年前
        1
  •  5
  •   Michał Marczyk    14 年前

    let -绑定局部变量是词汇范围的,因此 swank.swank/start-repl 不会受到 require / use 应用程序类路径上的任何Clojure名称空间(或使用 in-ns import

    请注意,您可能不应该这样做 (:use swank.swank) 在你的 ns 形式; (:require swank.swank) 相反。不同的是,前者能吸引所有的人 swank.swank use = require + refer ,请参见 (doc use) 详细信息等)。您似乎使用名称空间限定符号来访问Swank的Vars,因此您甚至不必更改其余代码,并且 要求 (:use [swank.swank :only [start-repl]]) start-repl Var,您可以直接使用它,而无需 swank.swank/ 钻头。