Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure:Pass';扩展的';函数的可选参数_Clojure_Arguments_Sequence_Keyword_Optional - Fatal编程技术网

Clojure:Pass';扩展的';函数的可选参数

Clojure:Pass';扩展的';函数的可选参数,clojure,arguments,sequence,keyword,optional,Clojure,Arguments,Sequence,Keyword,Optional,我是Clojure的新手,我一直在研究如何“扩展”一个函数的可选参数,以便将它们发送到另一个使用可选参数的函数(但希望这些参数作为关键字,而不是一系列关键字) 我正在解析xml,如果我按照下面的方法硬编码值,我的函数工作,它将遍历xml并找到“title”的值: ; zd was required like this [clojure.data.zip.xml :as zd] ; ... (defn get-node-value [parsed-xml & node-path] (z

我是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)
我想做的是使用“节点路径”传入任意数量的关键字,但当按以下方式写入时,它以关键字序列的形式出现,因此会引发异常:

(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)

谢谢

我想你正在寻找应聘者(http://clojuredocs.org/clojure_core/clojure.core/apply)

也许你想要:

(defn get-node-value [parsed-xml & node-path]
  (zd/xml-> (zip/xml-zip parsed-xml) ((apply comp (reverse node-path))) zd/text))
我无法测试上述内容,因此我从类比入手:

(-> {:a {:c 1}, :b 2} ((apply comp (reverse [:a :c]))))
1
但是,如果dAni的解决方案有效,请忽略我

(-> {:a {:c 1}, :b 2} ((apply comp (reverse [:a :c]))))
1