6

基于http://github.com/technomancy/swank-clojure的嵌入部分,我正在使用以下内容对其进行测试。有没有更好的不使用编译器的方法来做到这一点?有没有办法以编程方式停止 swank?似乎 start-repl 控制了线程。什么是为它生成另一个线程并能够以编程方式终止该线程的好方法。

import clojure.lang.Compiler; 
import java.io.StringReader; 

public class Embed { 
    public static void main(String[] args) throws Exception { 
        final String startSwankScript = 
            "(ns my-app\n" + 
                "  (:use [swank.swank :as swank]))\n" + 
                "(swank/start-repl) "; 
        Compiler.load(new StringReader(startSwankScript)); 
    } 
} 

非常感谢任何帮助,hhh

4

1 回答 1

5

你可以接受Embed在 Clojure 中实现这个类吗?您可以使用gen-class(有关详细信息,请参阅Meikel Brandmeyer 的教程)和 AOT 编译来做到这一点。

代码可能类似于

(ns your-app.Embed
  (:require [swank.swank :as swank])
  (:gen-class
   :methods [[startSwank [] void]]))

(defn -startSwank []
  (swank/start-repl))

(添加您需要的任何其他内容);然后在应用程序的 Java 部分,您可以导入 Clojure 准备的类,实例化它并调用.startSwank()实例。

不确定以编程方式停止 Swank ......我很想知道自己有一个很好的方法来做到这一点。(如果我弄明白了,我会回来更新;否则,我很想阅读其他人的答案,详细说明如何去做。)

于 2010-04-18T20:48:56.290 回答