2009-02-26 10 views

risposta

14

Finché le lingue in questione producono effettivamente classi Java (ovvero: classi note alla piattaforma Java, non necessariamente scritte in linguaggio Java), allora sì: possono facilmente interagire tra loro.

Almeno per Groovy so che è del tutto possibile scrivere classi che possono essere utilizzate dal codice Java "normale".

+0

E 'anche possibile utilizzare Clojure generato classi in codice Java e viceversa: così l'intera Clojure <-> Java <-> percorso Groovy dovrebbe funzionare – mikera

14

Clojure può essere compilato in file .class tramite gen-class e utilizzato da Java come qualsiasi altro codice; vedi here.

2

Come già accennato, è possibile accedere alle classi Clojure da Groovy tramite la pre-compilazione.

È possibile accedere a più popolare scripting lingue tramite Java 6 di API di scripting come pure, se Scala e Clojure non sembrano essere ufficialmente supportata. Ecco alcuni esempi da Groovy:

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

È anche possibile ottenere l'accesso alle classi di Clojure da Groovy, per esempio (Per Groovy 1,7 snapshot):

@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 
} 

o interagire tramite la creazione di un nuovo processo (ancora per Groovy 1,7 snapshot):

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

C'è anche un plugin Clojure per Grails che fornisce un facile accesso per l'esecuzione codice clojure da qualsiasi Grails manufatto (controllori, Taglibs, servizi, ecc ...):

http:// grails.org/plugin/clojure

+0

solo per commentare le graal plug-parte e dire che ho usato il plugin nella produzione senza un problema tecnico e una grande gioia. –

3

Come è stato detto, Clojur e può interagire facilmente con Java. Sebbene molti degli esempi che vedete mostrano come farlo dal REPL, una volta compilato Clojure, o qualsiasi altra lingua JVM, in una classe o in un file jar, può essere chiamato da Java come qualsiasi altra classe.

Nel mio caso, la difficoltà (non molto di uno) era capire come utilizzare correttamente gen-class. C'è un piccolo insieme di funzioni statistiche scritte in Clojure allo http://kenai.com/projects/binomialstats che illustra come farlo. Quella libreria Clojure è usata da un progetto Java - signtest. (Scusate, dato che sono nuovo, StackOverflow non mi consente di pubblicare più collegamenti.)

Ciò che sarebbe davvero bello ora è che alcuni IDE potrebbero trattare lingue diverse nello stesso progetto. I due progetti sopra menzionati vengono mantenuti come due singoli progetti NetBeans, ad esempio. Garantire che le due parti siano sempre sincronizzate può essere un po 'più di lavoro.

Problemi correlati