2009-02-26 5 views
12

मैं समझता हूं कि आप आसानी से ग्रोवी & जावा, क्लोजर & जावा, जो भी जेवीएमएल & जावा मिश्रण कर सकते हैं।क्या आप जेवीएम भाषाएं जोड़ सकते हैं? यानी: ग्रोवी और क्लोजर

क्या इसका यह भी अर्थ है कि मैं क्लोजर और ग्रोवी कोड भी इंटरैक्ट कर सकता हूं? अगर मैं Grails या jRoR का उपयोग करता हूं, तो क्या मैं उस वातावरण में क्लोजर का उपयोग भी कर सकता हूं?

उत्तर

14

जब तक प्रश्न में भाषाएं वास्तव में जावा कक्षाएं उत्पन्न करती हैं (यानी: जावा प्लेटफ़ॉर्म के लिए जाने वाली कक्षाएं, जावा भाषा में जरूरी नहीं है), तो हाँ: वे आसानी से एक दूसरे के साथ बातचीत कर सकते हैं।

कम से कम ग्रोवी के लिए मुझे पता है कि कक्षाओं को लिखना पूरी तरह संभव है जिसे "सामान्य" जावा कोड से उपयोग किया जा सकता है।

+0

यह भी Clojure उत्पन्न जावा कोड और इसके विपरीत में कक्षाओं का उपयोग करना संभव है: इसलिए पूरे Clojure <-> जावा <-> ग्रूवी पथ – mikera

14

क्लोजर gen-class के माध्यम से .class फ़ाइलों में संकलित किया जा सकता है और जावा से किसी अन्य कोड की तरह उपयोग किया जा सकता है; here देखें।

2

जैसा कि पहले से ही उल्लेख किया गया है, आप प्री-संकलन के माध्यम से ग्रोवी से क्लोजर कक्षाओं तक पहुंच सकते हैं।

आप जावा 6 की स्क्रिप्टिंग एपीआई के माध्यम से सबसे लोकप्रिय स्क्रिप्टिंग भाषाओं तक पहुंच सकते हैं, हालांकि स्कैला और क्लोजर को आधिकारिक तौर पर समर्थित नहीं लगता है। यहाँ ग्रूवी से उदाहरण हैं:

http://groovy.codehaus.org/JSR-223+access+to+other+JVM+languages

तुम भी ग्रूवी, उदा से Clojure की कक्षाओं के लिए उपयोग कर सकते हैं (ग्रूवी 1.7 स्नैपशॉट के लिए):

@Grab(group='org.clojure', module='clojure', version='1.0.0') 
import clojure.lang.* 

def ss = StringSeq.create('The quick brown fox') 
def done = false 
while (!done) { 
    println ss.first() 
    ss = ss.next() 
    done = !ss 
} 

या एक नई प्रक्रिया (फिर ग्रूवी 1.7 स्नैपशॉट के लिए) बनाने के माध्यम से बातचीत:

@Grab(group='org.clojure', module='clojure', version='1.0.0') 
import clojure.lang.Script 

def src = new File('temp.clj') 
src.text = ''' 
(defn factorial [n] 
    (if (< n 2) 
     1 
     (* n (factorial (- n 1))))) 
(println (factorial 4)) 
''' 
def path = System.getProperty('user.home') + '/.groovy/grapes/org.clojure/clojure/jars/clojure-1.0.0.jar' 
new AntBuilder().with { 
    java(classname:Script.name, classpath:path) { 
     arg(value:src.path) 
    } 
} 

भी Grails जो निष्पादित करने के लिए आसान पहुँच प्रदान करता लिए एक Clojure प्लगइन नहीं है किसी भी Grails विरूपण साक्ष्य से clojure कोड (नियंत्रकों, taglibs, सेवाओं आदि ...):

http:// grails.org/plugin/clojure

+0

काम सिर्फ grails प्लगइन ओर से टिप्पणी करने के लिए और कहते हैं कि मैं उत्पादन में प्लगइन का इस्तेमाल किया जाना चाहिए था एक गड़बड़ के बिना, और महान खुशी। –

3

के रूप में उल्लेख किया गया है, Clojur ई जावा के साथ आसानी से बातचीत कर सकते हैं। यद्यपि आप देख रहे कई उदाहरण दिखाते हैं कि आरईपीएल से इसे कैसे किया जाए, एक बार क्लोजर, या किसी अन्य जेवीएम भाषा को कक्षा या जार फ़ाइल में संकलित करने के बाद, इसे जावा से किसी भी अन्य वर्ग की तरह ही कहा जा सकता है।

मेरे मामले में, कठिनाई (एक से अधिक नहीं) यह पता लगाना था कि gen-class सही तरीके से कैसे उपयोग करें। Clojure में http://kenai.com/projects/binomialstats पर लिखे गए सांख्यिकीय कार्यों का एक छोटा सा सेट है जो दिखाता है कि इसे कैसे किया जाए। क्लोजर लाइब्रेरी का उपयोग जावा प्रोजेक्ट - साइनटेस्ट द्वारा किया जाता है। (क्षमा करें, क्योंकि मैं नया हूं, स्टैक ओवरव्लो मुझे कई लिंक पोस्ट नहीं करने देगा।)

वास्तव में अब क्या अच्छा होगा अगर कुछ आईडीई एक ही प्रोजेक्ट में विभिन्न भाषाओं से निपट सकते हैं। उपरोक्त वर्णित दो परियोजनाओं को उदाहरण के लिए दो व्यक्तिगत नेटबीन परियोजनाओं के रूप में रखा जाता है। यह सुनिश्चित करना कि दो हिस्सों को हमेशा सिंक्रनाइज़ किया जाता है, अतिरिक्त काम हो सकता है।

1

एक और वातावरण जो जेवीएम पर मिश्रण भाषाओं को सुविधाजनक बनाता है WebSphere sMash (उर्फ परियोजना शून्य)।इसमें शामिल हैं:

संबंधित मुद्दे