【发布时间】:2014-11-04 11:27:42
【问题描述】:
我在 clojure 中尽可能地生成 json。我的问题是,只有给定参数时,json 的某些分支才会出现。这是这种情况的一个示例
(defn message-for
[name uuid & [generated-uuids]]
{:message {:id (generate-uuid)
:details {:name name}
:metadata {:batch (merge {:id uuid}
(when generated-uuids (let [batches (map #(array-map :id %) generated-uuids)]
{:generatedBatches batches})))}}})
不幸的是,when/let 部分非常难看。这同样可以使用 when-let 来实现,但它不起作用,因为我的地图返回 [] 而不是 nil。
(defn message-for
[name uuid & [generated-uuids]]
{:message {:id (generate-uuid)
:details {:name name}
:metadata {:batch (merge {:id uuid}
(when-let [batches (map #(array-map :id %) generated-uuids)]
{:generatedBatches batches}))}}})
如果我能以某种方式让 when-let 将空列表/数组/seq 视为错误,那么我可以稍微清理一下我的代码,有什么想法吗?
【问题讨论】:
-
显然,如果 generate-uuids 为空,则不会创建 :generatedBatches 键。而且您确实在第一个解决方案中检查了生成的 uuid 的空性。因此,您可以像这样使您的第一个解决方案更短(when (seq generated-uuids) {:generatedBatches (map #(array-map :id %) generated-uuids)})
标签: clojure