7

私はclojureを試していて、サードパーティのライブラリを使用する感覚をつかもうとしています。ソースをダウンロードし、それを leiningen で jar ファイルにバンドルし、それをクラスパスに入れ、('lib.etc を使用して) スクリプトに入れることができました。また、java.lang.* のオブジェクトをいじってみました。

ただし、サードパーティのJavaでは成功していません。

$ java -cp clojure.jar:clojure-contrib.jar:com.jcraft.jsch_0.1.31.jar clojure.main
Clojure 1.1.0
user=> (require 'com.jcraft.jsch)
java.io.FileNotFoundException: Could not locate com/jcraft/jsch__init.class or com/jcraft/jsch.clj on classpath:  (NO_SOURCE_FILE:0)

$ jar tf com.jcraft.jsch_0.1.31.jar | egrep "(init|clj)"
$

__init.class または .clj ファイルを作成する必要があるようです。これは本当ですか、または純粋な Java クラスがロードされるはずの別の方法がありますか?

4

2 に答える 2

8

Java クラスの場合import:

(import java.util.ArrayList)

;// or use a prefix for multiple classes:
(import [java.util ArrayList Collection])

;// or preferably in the ns declaration:
(ns my.lib
  [:import [java.util ArrayList Collection]])

user=> (def al (ArrayList.))
#'user/al
user=> (.add al "hi")
true
user=> (.size al)
1

importはマクロであるため、パッケージ名とクラス名を引用符で囲む必要はありません。

またimport java.util.*;、インポートするクラスを指定する必要があります。

于 2010-07-25T00:29:00.180 に答える
1

importClojure以外のものに使用してみてください。

于 2010-07-24T22:46:13.677 に答える