tutorial - install clojure




將Clojure集成到現有的Java項目中? (2)

使用現有的Java應用程序並將其封裝在Clojure中比其他方式更容易,因為Clojure的Java interop非常簡單。

當您問如何從Java訪問Clojure時,答案就是您需要引導加載Clojure代碼,或者您需要生成可從Java項目中使用的Java類文件。 引導涉及鏈接到clojure jar和訪問加載函數來加載clojure源。 要生成Java類,請查看AOT(請參閱網站上的示例)。

我如何獲得一個大型的Java項目,並開始添加Clojure模塊? 例如,在下面的代碼中,我想在Java中提供以下功能: state?,zip?,state-list,zipcode-list 。 兩個謂詞將返回一個布爾值,但“getters”將返回數組。

(def *states* (list "NJ" "NY" "CA"))
(def *zipcodes*  (list 12345 54343 98765))

(defn member [x sq]
  (if (seq sq)
    (if (= x (first sq))
      sq
      (recur x (rest sq)))))

(defn state? [aState]
  (not (= (member aState *states*) nil)))

(defn zip? [aZip]
  (not (= (member aZip *zipcodes*) nil)))

(defn state-list []
  *states*)

(defn zipcode-list []
  *zipcodes*)
;; ---------------
(state? "AA")
(state? "CA")
(zip? 11111)
(zip? 12345)

我將使用leininge n編譯它,然後將jar文件作為build dep添加到我的java項目中。 這裡是使用leiningen的一個偉大的視頻 。 那麼你會直接從java調用它。 Leiningen有一個uberjar選項,可以在clojure和所有的clojure依賴項中生成,所以你只需要擔心一個文件。 我喜歡這個,因為它的工作較少。

一個更友善的方法是添加一個ant任務,與java項目一起構建它只是一個更多的工作

對於需要返回正確的java數組的函數來調用它們to-array

與許多頂級的“從java調用clojure”命中相反,你不需要調用clojure運行時RT。

PS:我最喜歡的標籤行“我想用一個名為clojure的java庫”我問Rich,他說這很酷;)





clojure