2009-02-26 7 views

Antwort

14

Solange die betreffenden Sprachen tatsächlich Java-Klassen erzeugen (dh Klassen, die der Java-Plattform bekannt sind und nicht unbedingt in der Java-Sprache geschrieben sind), dann ja: Sie können leicht miteinander interagieren.

Zumindest für Groovy weiß ich, dass es durchaus möglich ist, Klassen zu schreiben, die aus "normalem" Java-Code verwendet werden können.

+0

Es ist auch möglich, Clojure in Java-Code und umgekehrt generierten Klassen zu verwenden: so die ganze Clojure <-> Java <-> Groovy Pfad sollte – mikera

14

Clojure kann in .class-Dateien über gen-class kompiliert und von Java wie jeder andere Code verwendet werden; siehe here.

2

Wie bereits erwähnt, können Sie auf Clojure-Klassen von Groovy via Vorkompilierung zugreifen.

Sie können die meisten gängigen Scripting Sprachen über Java 6 Scripting API auch, obwohl Scala und Clojure nicht offiziell unterstützt werden. Hier sind einige Beispiele von Groovy:

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

Sie auch Zugriff auf Clojure der Klassen von Groovy erhalten können, beispielsweise (Für 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 
} 

Oder interagieren ein neues Verfahren über die Schaffung (wieder für 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) 
    } 
} 

Es gibt auch ein Clojure-Plugin für Grails die einen einfachen Zugang bietet auszuführen clojure Code von jedem Grails Artefakts (Steuerungen, taglibs, Dienstleistungen usw. ...):

http:// grails.org/plugin/clojure

+0

arbeiten gerade an den grails Kommentar Teil Plugin und sagen, dass ich das Plugin in der Produktion verwendet haben ohne einen Fehler und große Freude. –

3

Wie erwähnt wurde, Clojur e kann leicht mit Java interagieren. Obwohl viele der Beispiele zeigen, wie man es von der REPL aus macht, kann man, sobald man Clojure oder eine andere JVM-Sprache in eine Klasse oder JAR-Datei kompiliert hat, diese wie jede andere Klasse von Java aus aufrufen.

In meinem Fall war die Schwierigkeit (nicht viel von einem) herauszufinden, wie man gen-class richtig verwendet. Es gibt eine kleine Menge statistischer Funktionen, die in Clojure unter http://kenai.com/projects/binomialstats geschrieben sind und die zeigen, wie es geht. Diese Clojure-Bibliothek wird von einem Java-Projekt verwendet - signtest. (Sorry, da ich neu bin, lässt StackOverflow mich nicht mehrere Links veröffentlichen.)

Was wäre wirklich schön jetzt ist, wenn einige der IDEs mit verschiedenen Sprachen im selben Projekt beschäftigen könnten. Die beiden oben genannten Projekte werden beispielsweise als zwei einzelne NetBeans-Projekte gepflegt. Sicherzustellen, dass die beiden Teile immer synchronisiert sind, kann ein bisschen zusätzliche Arbeit sein.

Verwandte Themen