2014-10-17 3 views
0

Я использую gen-class для генерации Java-классов из моего кода Clojure. Чтобы сделать работу gen-class, мне нужно добавить дополнительный первый параметр ко всем методам, которые будут добавлены в класс (здесь называется this).Как вызвать метод gen-class из clojure

(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?

Thge нижеследующий не работает, поскольку первый параметр отсутствует.

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

Полезно ли просто вызвать функцию с пустым первым параметром?

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

Или я должен добавить функцию (например, addToString), что я использую внутренне и вызвать эту функцию из одного, который будет добавлен в качестве метода класса-файл?

ответ

0

Чтобы рассматривать тот же код, что и метод для сгенерированного класса, и как функция, отдельная от указанного класса, кажется немного вонючим ко мне (в смысле запаха кода, что-то, что указывает на проблему где-то в дизайне) ,

Возможно, addToString должен быть статическим методом?

Возможно, вам нужно сделать функцию add-to-string, которая может использоваться непосредственно в clojure, а также вызывается методом addToString?

Нам нужно будет узнать больше о вашем более крупном дизайне, прежде чем мы узнаем лучший ответ, но я подозреваю, что это один из них.