clojure:for循环内容未调用 [英] clojure: for loop contents not invoked
本文介绍了clojure:for循环内容未调用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用Clojure的BaseX的内部数据类型来构建XML结构。
I'm trying to build an XML structure using the internal data types from BaseX from Clojure.
(defn basex-elem [token-name dict]
(let [elem (org.basex.query.item.FElem.
(org.basex.query.item.QNm. token-name))]
(for [[k v] dict]
(do
(println "THIS IS REACHED")
(let [k-name (org.basex.query.item.QNm. (.getName k))
k-attr (org.basex.query.item.FAttr.
k-name
org.basex.util.Token/token v))]
(.add elem k-attr))))
elem))
在使用此功能时哭泣地创建一个元素,从不打印已达到:
When using this to cry to create an element, "THIS IS REACHED" is never printed:
(def test-elem (basex-elem "element-name" {:key1 "value1", :key2 "value2"}))
; => #'user/test-elem
因此,值返回时没有任何属性:
And thus the value comes back without any attributes:
test-elem
; => #<FElem <element-name/>>
但是添加属性则相反。
(.add test-elem
(org.basex.query.item.FAttr.
(org.basex.query.item.QNm. "foo")
(org.basex.util.Token/token "bar")))
; => #<FElem <element-name foo="bar"/>>
因此,想必我在循环中做错了。
Thus, presumably I'm doing something wrong with the loop. Any pointers?
推荐答案
for
并不是Clojure中的循环构造,
for
is not a loop construct in clojure, rather it's a list comprehension and produces a lazy sequence.
在有副作用的情况下使用 doseq
代替。
Use doseq
instead when side effects are intended.
这篇关于clojure:for循环内容未调用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文