我是 Clojure 的新手,我一直坚持如何“扩展”函数的可选参数,以便可以将它们发送到另一个使用可选参数的函数(但希望这些参数作为关键字而不是关键字序列)。
我正在解析 xml,如果我硬编码值如下,我的函数有效,它会遍历 xml 并找到“标题”的值:
; 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)
谢谢!