我正在尝试使用Clojure的BaseX中的内部数据类型来构建一个XML结构。
(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))当使用this命令创建一个元素时,永远不会打印"THIS IS REACHED“:
(def test-elem (basex-elem "element-name" {:key1 "value1", :key2 "value2"}))
; => #'user/test-elem 因此返回的值没有任何属性:
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"/>>因此,假设我对循环做了一些错误的事情。有什么建议吗?
发布于 2012-04-13 07:41:56
for在clojure中不是一个循环结构,而是一个列表理解,并产生一个惰性序列。
如果要产生副作用,请改用doseq。
https://stackoverflow.com/questions/10133341
复制相似问题