如何在Clojure的Hiccup数据结构中优雅地呈现一个有条件的菜单项列表?我的模板函数最终会充斥着对into
的调用,而且不够自然。
期望的结果:
[:div.menu
[:div.item "Home"]
[:div.item "Private"]
[:div.item "Private"]
[:div.item "Public"]
如果我把私有项目放在
if
中,我仍然需要展开返回的向量或处理nil
,所以这种方法行不通:[:div.menu
[:div.item "Home"]
(if authenticated?
[[:div.item "Private"]
[:div.item "Private"]])
[:div.item "Public"]]
我发现可以使用(into [:div.menu] ...)
并传入一个项目列表,但这样做不太方便且不易阅读。最终我得到了以下表达式:
(-> [:div.menu
[:div.item "Home"]]
(into (if (auth/authenticated?)
[[:div.item "Private"]
[:div.item "Private"]]
(into [[:div.item "Public"]]))
有更好的方式吗?