2

私は実行しlein new app hm、次にhm/src/hm編集core.cljして次のようにしました。

(ns hm.core
  (:gen-class)
  (:use [hm.hashmap]))

(defn -main []
  (def j (new hm.hashmap))
  (-add j "foo" "bar")
  (println j))

そして次のhashmap.cljようになります:

(ns hm.hashmap
  (:gen-class
   :methods [[hashmap [] java.util.HashMap]
             [add [String String]]]))

(defn -hashmap []
  (def h (new java.util.HashMap))
  h)

(defn -add [this key value]
  (. this put key value)
  this)

目標は、HashMap のラッパーを作成して、Clojure とそれが Java とどのように結びついているかを理解できるようにすることです。私はClojureにかなり慣れていません。しかし、これをコンパイルすると、 で ClassNotFoundException が大量に発生しますhashmap.clj。どうすればこれを機能させることができますか?

4

2 に答える 2

0

注:これはあなたの質問に対する直接の回答です。この方法で Clojure を学ぶことはお勧めしません。


クラスを実行する前に、クラスをコンパイルする必要があります。project.clj で、これをマップに追加します。

:aot [hm.hashmap]

lein compile次に、クラスをコンパイルするために実行する必要があります。hm.hashmapクラスがコンパイルされたことを示す出力が表示されます。その後、実行lein runして の「メイン」関数を呼び出しhm.coreます。

:methods以下で既に定義しているため、gen-classの一部を削除しましたが、それが奇妙なjava.lang.,エラーの原因でした。他のエラーが発生する可能性がありますが、この問題を解決するにはこれで十分です。

于 2013-07-31T16:26:46.780 に答える