Arama java clojure
Üst google en java clojure" eski ve clojure.lang.RT
kaynak kodu derlemek için kullanmanızı öneririz. "dediğin için vurur Java zaten Clojure projeden bir kavanoz yerleşik ve birlikte sınıf içinde varsayarak Clojure aramak için nasıl net bir açıklama ile yardımcı olabilir misiniz?
CEVAP
GüncellemeBu cevap yayınlanmıştır beri, araçların biraz değişti. Orijinal cevap sonra, mevcut araçları ile örnek oluşturmak için nasıl hakkında bilgi içeren bir güncelleme olduğu.
Bir kavanoz derleniyor ve iç yöntemleri çağırmak kadar basit değil. Ama işe yaraması için birkaç hile var. İşte bir kavanoz için derlenmiş basit Clojure bir dosya örneği:
(ns com.domain.tiny
(:gen-class
:name com.domain.tiny
:methods [#^{:static true} [binomial [int int] double]]))
(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)))
)
Eğer çalıştırırsanız, şöyle bir şey görmelisiniz:
(binomial 5 3): 10
(binomial 10042 111): 49068389575068144946633777...
Ve burada tiny.jar
-binomial
işlevini çağıran bir Java programı.
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));
}
}
O çıktı
(binomial 5 3): 10.0
(binomial 10042, 111): 4.9068389575068143E263
Magic ilk parça gen-class
deyim :methods
anahtar kelime kullanıyor. Sana bir şey Java'da statik yöntemler gibi Clojure işlevi erişmek için gerekli gibi görünüyor.
İkincisi Java tarafından çağrılan kapsayıcı bir fonksiyon oluşturmaktır. -binomial
ikinci versiyonu önünde bir çizgi var dikkat edin.
Ve tabii ki Clojure kavanoz kendisi sınıf Yolu üzerinde olması gerekir. Bu örnek, Clojure-1.1.0 kavanoz kullanılır.
GüncellemeBu cevap tekrar test aşağıdaki araçları kullanarak: olmuştur
- Clojure 1.5.1
- Leiningen 2.1.3
- GÖRDÜM 1.7.0 Güncelleme 25
Clojure Parçası
İlk proje ve ilişkili dizin yapısı bir Leiningen kullanarak oluşturun:
C:\projects>lein new com.domain.tiny
Şimdi, proje dizini değiştirin.
C:\projects>cd com.domain.tiny
Proje dizininde, project.clj
dosyayı açın ve içeriğini aşağıda gösterildiği gibi bu gibi düzenleyin.
(defproject com.domain.tiny "0.1.0-SNAPSHOT"
:description "An example of stand alone Clojure-Java interop"
:url "http://clarkonium.net/2013/06/java-clojure-interop-an-update/"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.5.1"]]
:aot :all
:main com.domain.tiny)
Şimdi, bağımlılıklar (Clojure) kullanılabilir olduğundan emin olun.
C:\projects\com.domain.tiny>lein deps
Bu noktada Clojure kavanoz indirmekle ilgili bir mesaj görebilirsiniz.
Şimdi Clojure C:\projects\com.domain.tiny\src\com\domain\tiny.clj
Clojure programın orijinal cevap gösterildiği içeren böyle bir dosya düzenlemek. (Bu dosya Leiningen proje oluşturulduğunda oluşturuldu.)
Büyüsünü burada ad alanı bildirimi. :gen-class
sistem tek bir statik bir yöntem binomial
bir işlevi, iki tamsayı argüman alacak ve bir çift dönen adında bir sınıf com.domain.tiny
adlı oluşturmak için söyler. Benzer isimli iki işlevleri binomial
geleneksel Clojure fonksiyon ve -binomial
ve Java erişilebilir sarıcı vardır. İşlev adı tire -binomial
not. Varsayılan önek tire, ama isterseniz başka bir şey değişmiş olabilir. -main
işlevi sadece doğru sonuçları alıyoruz emin olmak için binom fonksiyonu için birkaç telefon görüşmesi yapar. Bunu yapmak için, sınıf derleme ve programı çalıştırın.
C:\projects\com.domain.tiny>lein run
Çıkış orijinal cevap gösterildiği görmelisiniz.
Şimdi bir kavanoz içinde paket ve uygun bir yere koyun. Clojure kavanoz da orada kopyalayın.
C:\projects\com.domain.tiny>lein jar
Created C:\projects\com.domain.tiny\target\com.domain.tiny-0.1.0-SNAPSHOT.jar
C:\projects\com.domain.tiny>mkdir \target\lib
C:\projects\com.domain.tiny>copy target\com.domain.tiny-0.1.0-SNAPSHOT.jar target\lib\
1 file(s) copied.
C:\projects\com.domain.tiny>copy "C:<path to clojure jar>\clojure-1.5.1.jar" target\lib\
1 file(s) copied.
Java Parçası
Leiningen yerleşik görev, lein-javac
Java derleme ile yardımcı olmak gerekir. Ne yazık ki, sürüm 2.1.3 kırık gibi görünüyor. Yüklü olduğunu GÖRDÜM bulamıyor ve Maven depo bulamıyor. Hem yollar benim sistemde boşluk gömülü. Sorun olduğunu varsayıyorum. Herhangi bir Java IDE derleme ve paketleme de ele verebilir. Ama bu yazı için, eski okul ve komut satırında yapıyoruz.
İlk içeriğini özgün yanıt gösterilen dosya Main.java
oluşturun.
Java kısmını derlemek için
javac -g -cp target\com.domain.tiny-0.1.0-SNAPSHOT.jar -d target\src\com\domain\Main.java
Şimdi meta-bilgi ile bir dosya oluşturmak istediğimiz jar eklemek oluşturun. Manifest.txt
, eklenti, aşağıdaki metin
Class-Path: lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
Main-Class: Main
Şimdi hepsi koca bir kavanoz dosyası, Clojure programımız ve Clojure kavanozun içine dahil paket.
C:\projects\com.domain.tiny\target>jar cfm Interop.jar Manifest.txt Main.class lib\com.domain.tiny-0.1.0-SNAPSHOT.jar lib\clojure-1.5.1.jar
Programı çalıştırmak için:
C:\projects\com.domain.tiny\target>java -jar Interop.jar
(binomial 5 3): 10.0
(binomial 10042, 111): 4.9068389575068143E263
Çıkış o Clojure tek başına ürettiği için esasen aynıdır, ama sonuç bir Java çift dönüştürüldü.
Belirtildiği gibi, bir Java IDE muhtemelen dağınık derleme değişkenleri ve ambalaj ilgilenir.
Java geri arama işlevleri...
Clojure Java yeniden...
Performans ve Java birlikte Çalışabili...
Java geriye doğru arama ile bir HashMa...
Nasıl Dize değeri bir Java numaralama ...