Heim > Java > javaLernprogramm > Wie kann man Clojure-Funktionen mithilfe moderner Techniken effizient aus Java aufrufen?

Wie kann man Clojure-Funktionen mithilfe moderner Techniken effizient aus Java aufrufen?

Mary-Kate Olsen
Freigeben: 2024-12-20 07:57:09
Original
226 Leute haben es durchsucht

How to Efficiently Call Clojure Functions from Java Using Modern Techniques?

Clojure aus Java mit modernen Tools aufrufen

Während einige in früheren Online-Diskussionen bereitgestellte Informationen möglicherweise veraltet sind, bleibt der Aufruf von Clojure aus Java relativ einfach. Hier ist eine Schritt-für-Schritt-Anleitung:

Vorbereitung des Clojure-Glases:

  1. Erstellen Sie ein Clojure-Projekt mit Leiningen: lein new com.domain.tiny
  2. Definieren Sie Ihre Clojure-Funktionen in src/com/domain/tiny.clj:

    (ns com.domain.tiny)
    
    (defn binomial
      "Calculate the binomial coefficient."
      [n k]
      (let [a (inc n)]
     (loop [b 1
            c 1]
       (if (> b k)
         c
         (recur (inc b) (* (/ (- a b) b) c))))))
    
    (defn -binomial
      "A Java-callable wrapper around the 'binomial' function."
      [n k]
      (binomial n k))
    
    (defn -main []
      (println (str "(binomial 5 3): " (binomial 5 3)))
      (println (str "(binomial 10042, 111): " (binomial 10042 111))))
    Nach dem Login kopieren
  3. Generieren Sie ein Glas mit der Leiningen-Aufgabe: lein jar
  4. Kopieren Sie das Clojure-Glas und Ihr generiertes tiny.jar in ein günstige Lage

Java Code:

  1. Erstellen Sie eine Java-Klasse, die die Clojure-Funktion aufruft:

    import java.lang.reflect.Method;
    
    import com.domain.tiny;
    
    public class Main {
    
     public static void main(String[] args) {
         try {
             Method binomialMethod = Class.forName("com.domain.tiny").getMethod("binomial", int.class, int.class);
    
             Integer n = 5;
             Integer k = 3;
             Double result = (Double) binomialMethod.invoke(null, n, k);
             System.out.println("(binomial " + n + " " + k + "): " + result);
    
             n = 10042;
             k = 111;
             result = (Double) binomialMethod.invoke(null, n, k);
             System.out.println("(binomial " + n + ", " + k + "): " + result);
         } catch (Exception e) {
             System.err.println("Error calling Clojure function: " + e.getMessage());
             e.printStackTrace();
         }
     }
    }
    Nach dem Login kopieren
  2. Kompilieren Sie die Java-Klasse mit javac
  3. Erstellen Sie eine Manifestdatei (MANIFEST.MF) mit den entsprechenden Abhängigkeiten:

    Manifest-Version: 1.0
    Class-Path: tiny.jar:clojure-x.y.z.jar
    Main-Class: Main
    Nach dem Login kopieren
  4. Packen Sie die Java-Klasse und die Abhängigkeiten in ein JAR: jar cfm Interop.jar MANIFEST.MF Main.class tiny.jar clojure-x.y.z.jar

Führen Sie das Programm aus:

  1. Stellen Sie sicher, dass Ihr Clojure jar und tiny.jar befinden sich im Klassenpfad
  2. Führen Sie das Java-Jar aus: java -jar Interop.jar

Die Ausgabe sollte ähnlich sein wie:

(binomial 5 3): 10.0
(binomial 10042, 111): 4.9068389575068143E263
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man Clojure-Funktionen mithilfe moderner Techniken effizient aus Java aufrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage