2010-04-18 8 views
6

http://github.com/technomancy/swank-clojure, के एम्बेडिंग अनुभाग के आधार पर मैं इसका परीक्षण करने के लिए निम्न का उपयोग कर रहा हूं। ऐसा करने का कोई बेहतर तरीका है जो संकलक का उपयोग नहीं करता है? प्रोग्रामेटिक रूप से स्टॉप स्विच करने का कोई तरीका है? ऐसा लगता है कि स्टार्ट-रेप थ्रेड का नियंत्रण लेता है। इसके लिए एक और धागा फेंकने का एक अच्छा तरीका होगा और को उस थ्रेड को प्रोग्रामिक रूप से मारने में सक्षम हो जाएगा।जावा प्रोग्राम में swank-clojure एम्बेड करना

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

उत्तर

5

यह आप पर स्वीकार्य Clojure में Embed वर्ग को लागू करने के लिए होगा? आप gen-class के साथ ऐसा कर सकते हैं (विवरण के लिए Meikel Brandmeyer's tutorial देखें) और एओटी संकलन।

कोड

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

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

की तरह कुछ (कुछ और आप की आवश्यकता जोड़ें) जा सकते हैं; फिर अपने आवेदन के जावा भाग में, आप अपनी क्लोजर-तैयार कक्षा आयात कर सकते हैं, इसे तुरंत चालू कर सकते हैं और उदाहरण पर .startSwank() पर कॉल कर सकते हैं।

प्रोग्रामिक रूप से स्वैंक को रोकने के बारे में निश्चित नहीं है ... मुझे यह करने के लिए एक अच्छा तरीका जानने के लिए उत्सुकता होगी। (और अगर मैं इसे समझता हूं तो मैं एक अपडेट के साथ वापस आऊंगा; अन्यथा, मुझे किसी और के जवाब को पढ़ना अच्छा लगेगा कि इसके बारे में कैसे जाना है।)