我正在生成json,就像我可以在clojure中一样。我的问题是,只有给定参数时,json的某些分支才存在。这是一个这样的条件的样本clojure when-let替代一个空阵列?
(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来实现,但不起作用,因为我的地图返回[]而不是零。
(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}))}}})
任何想法,如果我能以某种方式使时,让考虑空单/数组/序列为假,所以我可以清理我的代码位?
很明显,你知道:generatedBatches键将不会被创建,如果产生-的UUID是空的。你在第一个解决方案中检查generated-uuids的空白。所以,你可以使你的第一个解决方案缩短为这样(当(seq generated-uuids) {:generatedBatches(map#(array-map:id%)generated-uuids)}) – mavbozo 2014-11-04 11:51:49