Реализовать метод интерфейса Java с переменным числом аргументов в Clojure - PullRequest
3 голосов
/ 02 февраля 2012

Я знаю, что я реализую Java-интерфейс в Clojure, используя прокси, как это:

(def print-element-handler
  (proxy [DefaultHandler] []
    (startElement [uri local qname atts]
      (println (format "Saw element: %s" qname)))))

Обратите внимание, что есть четыре аргумента, [uri local qname atts] , для четырехАргументы в методе интерфейса, startElement .

Предположим, что метод в интерфейсе Java имеет переменное количество аргументов, например:

List<Task> getTasks(Object... args);

Что я ставлю длясписок аргументов в соответствующей функции Clojure?

1 Ответ

3 голосов
/ 02 февраля 2012

Я не уверен на 100%, так как на данный момент я не могу проверить это, но я верю, что ответ - у вас есть только один параметр для массива.Я точно знаю, что когда вы вызываете Java-метод с помощью varags, вы должны преобразовать коллекцию Clojure в массив, прежде чем передавать его. Я полагаю, здесь все по-другому.источник для format:

(defn format
  "Formats a string using java.lang.String.format,
   see java.util.Formatter for format string syntax"
  {:tag String
   :added "1.0"}
  [fmt & args]
  (String/format fmt (to-array args)))
...