gpt4 book ai didi

collections - 将 org.w3c.dom.NodeList 转换为 Clojure ISeq

转载 作者:行者123 更新时间:2023-12-03 00:26:18 26 4
gpt4 key购买 nike

我正在尝试了解新的 defprotocolreify 等。

我有一个从 XPath 调用返回的 org.w3c.dom.NodeList,我想将其“转换”为 ISeq。

在Scala中,我实现了隐式转换方法:

implicit def nodeList2Traversable(nodeList: NodeList): Traversable[Node] = {
new Traversable[Node] {
def foreach[A](process: (Node) => A) {
for (index <- 0 until nodeList.getLength) {
process(nodeList.item(index))
}
}
}
}

NodeList 包含方法 int getLength()Node item(int index)

如何在 Clojure 中执行等效操作?我预计我需要使用 defprotocol。我需要定义哪些函数来创建 seq

如果我使用looprecur对列表进行简单、天真的转换,我最终会得到一个非惰性结构。

最佳答案

大多数 Clojure 的序列处理函数都会返回惰性序列,包括 maprange 函数:

(defn node-list-seq [^org.w3c.dom.NodeList node-list]
(map (fn [index] (.item node-list index))
(range (.getLength node-list))))

请注意,上面的 NodeList 类型提示不是必需的,但可以提高性能。

现在您可以像这样使用该函数:

(map #(.getLocalName %) (node-list-seq your-node-list))

关于collections - 将 org.w3c.dom.NodeList 转换为 Clojure ISeq,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5898215/

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