2010-07-30 4 views
5

Kullanıcı tanımlı Clojure komut dosyalarının Java Uygulamam ile etkileşime girmesini sağlamak istiyorum. Sorun şu ki, Clojure komut dosyalarının nerede bulunacağını önceden bilmiyorum, bu yüzden uygulamayı çalıştırırken onları sınıf yoluma ekleyemem.Clojure komut dosyasını sınıf yolumun dışından java'dan dinamik olarak nasıl yüklerim?

Clojure komut dosyasını sınıf yolumun dışından dinamik olarak nasıl yüklerim?

(ns user) 

(defn foo [a b] 
    (str a " " b)) 

Ancak hiçbir şans: gibi görünen bir test.clj ile

RT.loadResourceScript("test.clj"); 
Var foo = RT.var("user", "foo"); 
Object result = foo.invoke("Hi", "there"); 
System.out.println(result); 

:

Ben basit bir örnek denedim.

Sanırım RT.makeClassLoader() veya RT.baseLoader() ile ilgili bir şey var ve clojure dosyasını yüklemek için döndürülen yükleyiciyi kullanıyor, ancak çalışmayı göz ardı edemiyorum. (ClassNotFound'u tutmaya devam ediyorum) Muhtemelen clojure.lang.RT için javadoc'la dolaşabilirdim, ama onları bulamadım.

+0

Evet ... javadoc nerede! #:/ – progo

cevap

6

Not clojure.lang.Compiler.loadFile(String file)

+0

İşte bu. Teşekkürler Stuart! – brice

+0

Bunu clojure wiki dosyasına eklemek benim için uygun olur mu? – brice

1

Yeter ki bir dize olarak dosyayı okumak ve değerlendirmek olduğunu ne yapabileceğini Sınıfyolu şeyler bağlıdır olarak

(def content "(ns user) (defn foo [a b] (str a \" \" b))") 
(map eval (read-string (str \(content \)))) 

okuma-string akışından bir nesne okumak yapmanız gerekiyorsa bu yüzden Bir nesneyi yapmak için bir listedeki her şeyi sarmak.

+0

Teşekkürler Hamza, ama ben bunu ** Java ** den arıyorum. Bir değerlendirme yapabilmek istiyorum. Ama dokümanlar olmadan sadece 'eval' yönteminin nerede olduğunu bilmiyorum. (onun içinde değil clojure.lang.RT - kontrol ettim) – brice

+0

[Düzenle:] Bekle, sanırım seni alırım. Bilinen bir konumda bir clojure dosyası yazmayı ve argüman olarak yorumlanmasını istediğim clojure dosyasının içeriğini, istediğimi döndürecek şekilde iletmeyi mi kastediyorsunuz? Daha basit bir yolu yok mu? – brice

İlgili konular