Rumah >Java >javaTutorial >Bagaimana untuk Memanggil Fungsi Clojure dengan Cekap dari Java Menggunakan Teknik Moden?

Bagaimana untuk Memanggil Fungsi Clojure dengan Cekap dari Java Menggunakan Teknik Moden?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-20 07:57:09303semak imbas

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

Memanggil Clojure dari Java dengan Alat Moden

Walaupun sesetengah maklumat yang diberikan dalam perbincangan dalam talian sebelum ini mungkin sudah lapuk, panggilan Clojure dari Java masih agak mudah. Berikut ialah panduan langkah demi langkah:

Penyediaan Balang Clojure:

  1. Buat projek Clojure menggunakan Leiningen: lein new com.domain.tiny
  2. Tentukan fungsi Clojure anda dalam 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))))
  3. Janakan balang menggunakan tugas Leiningen: lein jar
  4. Salin balang Clojure dan tiny.jar yang anda hasilkan ke dalam lokasi yang selesa

Jawa Kod:

  1. Buat kelas Java yang memanggil fungsi Clojure:

    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();
         }
     }
    }
  2. Kompilasi kelas Java menggunakan javac
  3. Buat fail manifes (MANIFEST.MF) dengan yang sesuai kebergantungan:

    Manifest-Version: 1.0
    Class-Path: tiny.jar:clojure-x.y.z.jar
    Main-Class: Main
  4. Pakej kelas Java dan kebergantungan ke dalam balang: jar cfm Interop.jar MANIFEST.MF Main.class tiny.jar clojure-x.y.z.jar

Jalankan Program:

  1. Pastikan balang Clojure dan tiny.jar anda berada di laluan kelas
  2. Jalankan balang Java: java -jar Interop.jar

Output hendaklah serupa dengan:

(binomial 5 3): 10.0
(binomial 10042, 111): 4.9068389575068143E263

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Fungsi Clojure dengan Cekap dari Java Menggunakan Teknik Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn