gpt4 book ai didi

Clojure:将 'expanded' optional 参数传递给函数

转载 作者:行者123 更新时间:2023-12-04 17:11:32 26 4
gpt4 key购买 nike

我是 Clojure 的新手,我一直坚持如何“扩展”函数的 optional 参数,以便将它们发送到另一个使用 optional 参数的函数(但希望这些参数作为关键字而不是关键字序列)。

我正在解析 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)

谢谢!

最佳答案

我认为您正在寻找申请(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)))

关于Clojure:将 'expanded' optional 参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972805/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com