clojure:未调用for循环内容

Cha*_*ffy 1 clojure

我正在尝试使用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))
Run Code Online (Sandbox Code Playgroud)

当用它来哭来创建一个元素时,永远不会打印出"这是真的":

(def test-elem (basex-elem "element-name" {:key1 "value1", :key2 "value2"}))
; => #'user/test-elem 
Run Code Online (Sandbox Code Playgroud)

因此价值回归没有任何属性:

test-elem
; => #<FElem <element-name/>>
Run Code Online (Sandbox Code Playgroud)

但是添加属性会起作用.

(.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"/>>
Run Code Online (Sandbox Code Playgroud)

因此,大概是我在循环中做错了.有什么指针吗?

sw1*_*1nn 6

for 在clojure中不是一个循环结构,而是一个列表理解并产生一个惰性序列.

doseq如果打算产生副作用,请改用.