gpt4 book ai didi

Clojure 在 hiccup 和 noir 中使用 (for)

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

我正在使用 clojure 和 hiccup (带有 noir),并且我有以下代码:

(defn dataframe [id]
(db/db-to-data id))

(defpartial drop-downs [nms]
(for [nm (keys nms)] (drop-down nm (get nms nm))[:br])
(submit-button "Refresh")
)

(defpage "/dataset/table/:id" {:keys [id]}
(common/layout
(form-to [:post (format "/dataset/table/%s" id)]
(drop-downs {"alessio" [:col0], "test" [:col1]})
)
(html-table (dataframe id))))

我的问题是:

(for [nm (keys nms)] (drop-down nm (get nms nm))[:br])

我想在我的表单中进行多项选择。上面的行做到了这一点,但由于某种原因它没有考虑 [:br],所以它不会破坏行。但是,如果我这样做:

(form-to [:post (format "/dataset/table/%s" id)]
(drop-down "Test1" "1")[:br]
(drop-down "Test2" "2")[:br]
)

[:br] 标签确实有效。我相信这与 (for) 宏的工作方式有关,但我无法找出原因以及如何修复它。

编辑

按照建议,我放弃了 for 的使用。最终结果如下(这是 Joost 的答案,稍作修改):

(mapcat #(vector (drop-down % (nms %)) [:br]) (keys nms))

最佳答案

该代码甚至无法编译; for 需要恰好两个参数。

如果您想在 for 返回的序列中同时放入两个项目,请将它们放入向量中并稍后解压。

虽然我个人在这些情况下更喜欢使用mapcat。像这样的东西:

(into (form-to [:post (format "/dataset/table/%s" id)])
(mapcat #(vector (drop-down % (nms %)) [:br]) nms))

关于Clojure 在 hiccup 和 noir 中使用 (for),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8103757/

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