【发布时间】:2017-11-02 21:19:04
【问题描述】:
我有一组 URL,其中一些 URL 具有间接引用(作为向量)。任何没有间接引用的 URL 都只有nil。我从以下测试地图开始:
{"URL 1" nil,
"URL 2" ["indirect 1" "indirect 2"]}
我正在使用hiccup 构建一个 HTML 报告,所以我想要这个输出:
[:div "Imports: "
[:ul
[:li "URL 1"]
[:li "URL 2"]
[:ul
[:li "indirect 1"]
[:li "indirect 2"]
[:li "indirect 3"]]]]
当 URL 没有间接引用时,我遇到了一些返回 nil 的问题。我当前的代码如下所示:
(defn list-imports
[imports]
(if-not (nil? imports)
[:div "Imports: "
[:ul
(for [direct (keys imports)]
[[:li direct]
(if-let [indirects (get imports direct)]
[:ul
(for [indirect indirects]
[:li indirect])]
[:span])])]]
[:div "Imports: none" [:br] [:br]]))
问题是,它正在返回这个......
[:div
"Imports: "
[:ul
([[:li "URL 1"] [:span]]
[[:li "URL 2"] [:ul ([:li "indirect 1"] [:li "indirect 2"])]])]]
当间接导入为nil 时,我必须添加一个[:span] 标记,我真的不想在那里...但否则,它会将nil 放在那里。
另一个问题是它最终包含在() 和一个额外的向量中,因为我在 for 语句中做了很多事情。当我尝试用打嗝转换它时,我得到[:li "URL 1"] is not a valid element name.
【问题讨论】:
标签: clojure functional-programming hiccup