如何创建返回Hiccup结构的Clojure函数?

如何创建返回Hiccup结构的Clojure函数?,clojure,hiccup,Clojure,Hiccup,想象一下,我想编写一个Clojure函数,返回一个相当于Hello的Hiccup结构 我该怎么做? 我试过了 (defn render-location-details [cur-location] (let [] (list :h3 "Hello") ) ) 及 但在这两种情况下,都得到了错误消息(:h3“Location X”)不是有效的元素名称。 更新1:我正在从此函数调用上述函数: (defn generate-location-deta

想象一下,我想编写一个Clojure函数,返回一个相当于
Hello
的Hiccup结构

我该怎么做?

我试过了

(defn render-location-details
  [cur-location]
  (let []
    (list :h3 "Hello")
    )
  )

但在这两种情况下,都得到了错误消息
(:h3“Location X”)不是有效的元素名称。

更新1:我正在从此函数调用上述函数:

(defn generate-location-details-report
  [all-locations]
  (let
    [
     hiccup-title [:h2 "Locations"]
     hiccup-body (into []
                       (map
                         render-location-details
                         all-locations)
                       )
     ]
    (str
      (html hiccup-title)
      hiccup-body
      )
    )
  )

有一个集合
所有位置
。对于它的每个元素,我想用HTML(带有
h3
)头(
hiccup body
)创建一个节,在标题(
hiccup title
)前面加上前缀,并将所有内容转换为HTML。

hiccup
HTML
函数将获取一系列标记,并将它们作为字符串呈现

(let [locations ["one" "two" "three"]
      title-html [[:h2 "Locations"]]
      location-html (map (fn [location] [:h3 location]) locations)]
 (html (concat title-html location-html)))

"<h2>Locations</h2><h3>one</h3><h3>two</h3><h3>three</h3>"
(让[位置[“一”“二”“三”]
标题html[:h2“位置”]]
位置html(地图(fn[位置][:h3位置])位置)
(html(目录标题html位置html)))
“两树之间的位置”
第一个
渲染位置详细信息
不起作用,因为列表不是向量,因此Hiccup不会将其渲染为标记


第二个
渲染位置详细信息
正常,并执行您想要的操作。空的
(let[]
绑定是不必要的。但是,将
Hiccup主体(放入[]中)会混淆Hiccup
-它试图将位置标记的向量理解为标记,因为就Hiccup而言,向量=标记。

我们是否缺少一些代码?您如何称呼Hiccup?除了不需要let块之外,您的第二个示例看起来应该很好。我猜您最终会得到类似于
[:h3“location X”的结果]…]
这就给了你一个错误。所以问题是你调用
渲染位置详细信息的地方是哪里?@cfrick@pete23谢谢你的评论。我发布了调用
渲染位置详细信息的代码。如果有更好的方法来完成我的任务(为集合的每个元素创建一个HTML部分),我洗耳恭听。你基本上是在“串”打嗝。这样可能会冒出来。但是
到那里的
代码会解释你的错误。所以我仍然无法指出你出错的原因(要么这个代码不是你正在运行的代码,要么你从其他地方得到错误。但我会将其更改为基本
(html[:h2“L”)(进入[:div](地图…))
(let [locations ["one" "two" "three"]
      title-html [[:h2 "Locations"]]
      location-html (map (fn [location] [:h3 location]) locations)]
 (html (concat title-html location-html)))

"<h2>Locations</h2><h3>one</h3><h3>two</h3><h3>three</h3>"