【问题标题】:Clojure hiccup vanishing key namespacesClojure 打嗝消失的关键名称空间
【发布时间】:2020-08-09 07:34:19
【问题描述】:

我正在将地图的键值打印到 html,而键名称空间正在消失,这是我不想要的。

下面的layout调用打嗝的html5进行渲染:

(layout (str "Path " (:path/title path))
  [:h1 "Title: " (:title path) slug]
  [:p (str path)]       ; prints "{:db/id 17592186045542, :path/title "sdf"}"
  (println (keys path)) ; prints in terminal "(:db/id :path/title)"
  [:p (keys path)]      ; prints "idtitle" 
  (for [[k v] path] [:p k " " v]) ; prints "id 17592186045542" /n "title sdf" 
  (map (fn [[k v]] [:p k " " v]) path)))) ; same as above

(keys path)formap 调用中,键的“:db/”和“:path/”命名空间都不会呈现。为什么?

【问题讨论】:

  • 我想这些键是隐式的named,这与你在它们上显式使用str 的好情况不同。也许你应该使用[:p (str k) " " (str v)] 或者干脆使用[:p (str/join " " [k v])]
  • 是的,这行得通 :) 所以现在我想知道是什么让隐式调用 name 成为功能,而不是错误...
  • 我的猜测是任何一种方式都不完美,但是命名键对我来说感觉更笼统,因为在应用程序上下文之外,命名空间通常是无关紧要的

标签: clojure hiccup


【解决方案1】:

我想这些键是隐含的named,这与您在它们上显式使用str 的好情况不同。

也许你应该使用

[:p (str k) " " (str v)]

或者简单地说:

[:p (str/join " " [k v])]

【讨论】:

  • 检查我清楚我们在这里做什么以及为什么这个解决方案有效 - 我们正在将关键字转换为字符串,以便打嗝宏看不到关键字并认为“哦,我会打电话给name 以提供帮助”。所以本质上我们正在添加一个解决方法来防止宏做我们不想要的事情(远非理想情况,但我完全自愿打印出命名空间键的这个用例实际上只是我在探索/构建一个调试工具,并且不是“真正的”用例,因此在此阶段不值得将其视为打嗝问题。)。
  • (str k " " v)
  • 我最喜欢你的 :) :)
猜你喜欢
  • 2011-11-05
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 2011-08-31
  • 2011-02-28
  • 1970-01-01
  • 2013-08-28
相关资源
最近更新 更多