Java から Clojure を呼び出す
Java から Clojure を呼び出すことは、単に jar をコンパイルしてその内部メソッドを呼び出すほど簡単ではありません。代わりに、相互運用性を成功させるには、特定のテクニックが必要です。
Clojure ネームスペースの作成
Clojure 関数を Java から呼び出し可能にするには、:gen-class ディレクティブ。このディレクティブは、Java に公開するクラス名とメソッドを指定します。たとえば、次のスニペットは、binomial という名前の静的メソッドを使用して名前空間を定義します。
(ns com.domain.tiny (:gen-class :name com.domain.tiny :methods [#^{:static true} [binomial [int int] double]]))
ラッパー関数の使用
Java には、 Clojure 関数を呼び出すためのラッパー関数。このラッパー関数は、Clojure 関数と同じ名前にする必要がありますが、先頭にハイフン (-) を付けます。たとえば、前のスニペットのbinomial 関数は、Java アクセス用に -binomial にラップできます。
(defn -binomial "A Java-callable wrapper around the 'binomial' function." [n k] (binomial n k))
Clojure Jar をクラスパスに追加
コンパイルされたファイルを作成するには、Clojure jar をクラスパスに追加する必要がありますJava からアクセスできるコード。この手順により、必要な Clojure クラスが実行可能であることが確認されます。Java コードの例
Clojure 名前空間とラッパー関数が定義された、以下の基本的な Java プログラムです。 Clojure で定義されている-binomial 関数を呼び出しますjar:
import com.domain.tiny; public class Main { public static void main(String[] args) { System.out.println("(binomial 5 3): " + tiny.binomial(5, 3)); System.out.println("(binomial 10042, 111): " + tiny.binomial(10042, 111)); } }
Java プログラムの実行
Clojure jar がクラスパス上にあることを確認してから、Java プログラムを実行します:$ java -cp tiny.jar Main (binomial 5 3): 10.0 (binomial 10042, 111): 4.9068389575068143E263
-binomial 関数が Java とその結果は Java 計算で使用できます。
以上がJava から Clojure 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。