gpt4 book ai didi

clojure - 将多个参数展开为关键字

转载 作者:行者123 更新时间:2023-12-02 13:02:23 25 4
gpt4 key购买 nike

我有这个函数,它在 xml 结构中为我提供父节点的 id。

(ns foo.core
(:require [clojure.data.zip.xml :as cdzx]))

(defn id-of-parent [zipper child-id node1 node2 node3 node4]
(cdzx/xml-> zipper node1 node2 node3 node4
(cdzx/attr= :Id child-id) zip/up zip/up (cdzx/attr :Id)))

它会被称为

(id-of-parent zipper child-id :Foos :Foo :Bars :Bar)

我现在想通过用一个简单的“&路径”替换四个“节点”来使这个函数更加通用,这样我就可以使用任意数量的节点来设置路径。

(defn id-of-parent [zipper child-id & path]
(cdzx/xml-> zipper ????path????
(cdzx/attr= :Id child-id) zip/up zip/up (cdzx/attr :Id)))

将关键字序列展开为单个关键字的正确方法是什么?

最佳答案

unquote-splicing feature of the syntax-quote函数几乎总是用于在宏中构建函数调用,尽管它恰好非常适合构建一般函数调用。

(defn id-of-parent [zipper child-id & path]
(apply cdzx/xml-> `(~zipper ~@path
~(cdzx/attr= :Id child-id) ~zip/up ~zip/up ~(cdzx/attr :Id))))

因为xml->是一个函数而不是宏,您可以使用 apply 构建对其的调用

关于clojure - 将多个参数展开为关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11785388/

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