Clojure: передать «расширенные» необязательные аргументы в функцию

Я новичок в Clojure, и я застрял в том, как «расширить» необязательные аргументы функции, чтобы их можно было отправить в другую функцию, которая использует необязательные аргументы (но хочет, чтобы эти аргументы были ключевыми словами, а не последовательностью ключевые слова).

Я разбираю xml, и если я жестко кодирую значения, как показано ниже, моя функция работает, она проходит по xml и находит значение 'title':

; zd was required like this
[clojure.data.zip.xml :as zd]
; ...
(defn get-node-value [parsed-xml & node-path]
  (zd/xml-> (zip/xml-zip parsed-xml) :item :title zd/text))

(get-node-value parsed-xml)

Что я хочу сделать, так это использовать 'node-path' для передачи в любом количестве ключевых слов, но когда он написан, как показано ниже, он представляет собой последовательность ключевых слов, поэтому возникает исключение:

(defn get-node-value [parsed-xml & node-path]
  (zd/xml-> (zip/xml-zip parsed-xml) node-path zd/text))

(get-node-value parsed-xml :item :title)
; ClassCastException clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn  clojure.data.zip/fixup-apply (zip.clj:73)

спасибо!

5
задан kreek 10 June 2012 в 22:23
поделиться