2014-10-17 79 views
0

我使用gen-class從我的Clojure代碼生成Java-classes。爲了使gen-class工作,我需要爲所有將添加到類中的方法添加第一個參數(這裏稱爲this)。如何從clojure調用gen-class方法

(ns com.stackoverflow.clojure.testGenClass 
    (:gen-class 
    :name com.stackoverflow.clojure.TestGenClass 
    :implements [com.stackoverflow.clojure.TestGenClassInterface] 
    :prefix "java-")) 

(def ^:private pre "START: ") 

(defn java-addToString [this text post] 
    (str pre text post)) 

編譯後,在Java上下文中調用該方法正常工作。

(def var (com.stackoverflow.clojure.TestGenClass.)) 
(.addToString var "Aus Clojure heraus (Methode 1)." " :ENDE") 
(. var addToString "Aus Clojure heraus (Methode 2)." " :ENDE") 

但是我怎樣才能直接從Clojure開始呢?

由於缺少第一個參數,所以以下步驟不起作用。

(java-addToString "TexT" " :END") 

簡單地用空的第一個參數調用該函數是不是很好的做法?

(java-addToString "" "TexT" " :END") 

或者我應該增加一個功能(例如addToString),我在內部使用,並調用一個將要添加到類文件的方法之一這個功能呢?

回答

0

想要將相同的代碼作爲生成的類上的方法處理,並作爲與上述類分開的函數看起來有點臭(從代碼嗅覺的角度來看,表示設計中的某處存在問題) 。

也許addToString應該是一個靜態方法?

也許你應該做一個add-to-string函數,可以直接在clojure中使用,也可以用addToString方法調用?

在我們知道最佳答案之前,我們需要了解更多關於您的大型設計的知識,但我懷疑它是其中之一。