2010-04-18 15 views
6

Na podstawie sekcji Osadzanie http://github.com/technomancy/swank-clojure, Używam następujących elementów, aby przetestować to. Czy istnieje lepszy sposób na zrobienie tego tego, który nie używa kompilatora? Czy istnieje sposób programowo zatrzymać się? Wygląda na to, że start-repl przejmuje kontrolę nad wątkiem. Co to jest byłoby dobrym sposobem na odrodzenie się innego wątku i możliwość zabicia tego wątku programowo przez .Osadzanie programu swank-clojure w programie java

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)); 
    } 
} 

Każda pomoc mile widziane, hhh

Odpowiedz

5

byłoby do przyjęcia dla Ciebie zaimplementować klasę w Clojure Embed? Możesz to zrobić z gen-class (szczegóły: Meikel Brandmeyer's tutorial) i kompilacją AOT.

Kod może pójść coś

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

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

(dodać coś jeszcze można wymagać); następnie w części Java aplikacji można zaimportować klasę przygotowaną przez Clojure, utworzyć instancję i wywołać .startSwank() dla instancji.

Nie jestem pewien, czy programowo powstrzymać Swank ... Chciałbym wiedzieć, jak to zrobić. (Wrócę z aktualizacją, jeśli się zorientuję, w przeciwnym razie chciałbym przeczytać czyjąś odpowiedź, opisującą, jak to zrobić.)

Powiązane problemy