kre*_*eek 5 arguments clojure sequence keyword optional
我是Clojure的新手,我坚持如何'扩展'一个函数的可选args,这样它们就可以发送到另一个使用可选args的函数(但是希望那些args作为关键字而不是seq的关键字).
我正在解析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)
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用'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)
Run Code Online (Sandbox Code Playgroud)
谢谢!
我想你正在寻找申请(http://clojuredocs.org/clojure_core/clojure.core/apply)
(defn get-node-value [parsed-xml & node-path]
(let [params (concat node-path [zd/text])]
(apply zd/xml-> (zip/xml-zip parsed-xml) params)))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |