2013-09-02 5 views
1

я определил следующие MyCache.cljClojure поколения класса генерироваться классы призывание вопрос

(ns abcd.MyCache 
    (:gen-class 
    :name "abcd.MyCache" 
    :init "init" 
    :constructors { [java.text.DateFormat][] } 
    :methods [ [now [] void] [myformat [long] String] ] 
    :state "state" 
    :main false)) 

(defn -init[format] 
    ([[] (atom {:format format})])) 



(defn -now[this] ((:format @(.state this)) (System/currentTimeMillis))) 

(defn -myformat[this time] 
    ((:format @(.state this) (new java.util.Date time)))) 

Я составил вышеуказанный файл, используя (компилировать «abcd.MyCache) успешно.

Когда я пытаюсь использовать сгенерированные классы, как показано ниже. Я получаю ошибки. Пожалуйста помоги.

user=> (new abcd.MyCache (new java.text.SimpleDateFormat "mmDDyyyy")) 
IllegalArgumentException Key must be integer clojure.lang.APersistentVector.invoke (APersistentVector.java:265) 
+0

Что вы думаете, что это делать? ([[] (atom {: format format})]) – Chiron

ответ

1

Я не чувствую себя хорошо об этом:

(defn -init[format] 
    ([] [atom {:format format}])) 

Вы пытаетесь получить элемент из вектора и он ожидает, что индекс (номер).

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

Обратите внимание, что [atom {: format format}] не является правильным способом создания атома. Вы должны использовать:

(atom {:format format}) 

И кстати, следующая форма является предпочтительным, чтобы создавать объекты Java (ничего плохого (новый), конечно):

(Date.) 
(DateFormat.) 
+0

Благодарим вас за указание проблемы с атомом. – psaradhi

+0

(defn -init [format] ([[] (атом {: формат формат})])) user => (abcd.MyCache. (Java.text.SimpleDateFormat. "MmDDyyyy")) ArityException Неверное количество args (0) передано: PersistentVector clojure.lang.AFn.throwArity (AFn.java:437) – psaradhi

+0

Я осознал свою ошибку. init должен быть определен как (defn -init [format] [[] (atom {: format format})]). У меня есть дополнительные круглые скобки вокруг возвращаемого массива, вызывающие эту ошибку. Спасибо Chiron – psaradhi

 Смежные вопросы

  • Нет связанных вопросов^_^