2010-04-18 13 views
6

http://github.com/technomancy/swank-clojure, 'un Gömme bölümüne bağlı olarak, bunu test etmek için kullanıyorum. Compiler kullanmıyor bu yapmak için daha iyi bir yolu var mı? Programlı duruş swank için bir yolu var mı? Start-repl iş parçacığının kontrolünü ele alır gibi görünüyor. , bunun için başka bir iş parçacığı oluşturmanın iyi bir yolu olabilir ve iş parçacığını programatik olarak öldürebilir.java programına swank-clojure yerleştirme

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

Herhangi bir yardım çok takdir, hhh

cevap

5

o Clojure içinde Embed sınıfı uygulamak sizin için kabul olur mu? Bunu gen-class (ayrıntılar için bkz. Meikel Brandmeyer's tutorial) ve AOT derlemesi ile yapabilirsiniz.

kod

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

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

gibi bir şey (başka bir şey size gereken ekleyin) gidebiliriz; Daha sonra uygulamanızın Java bölümünde, Clojure ile hazırlanmış sınıfınızı içe aktarabilir, örneğini başlatabilir ve .startSwank() örneğini arayabilirsin.

Programlı durdurma Swank hakkında emin değilim ... Bunu yapmak için iyi bir yol olduğunu merak ediyorum. (Ve eğer anladım eğer bir güncelleme ile geri döneceğim; aksi halde, başkasının cevabını nasıl okuyacağımı ayrıntılı olarak okumayı çok isterim.)

İlgili konular