Я создаю json буквально, как я могу в clojure. Моя проблема в том, что некоторые ветви json присутствуют только при заданных параметрах. Вот пример такого состоянияclojure когда-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})))}}})
К сожалению, когда/-ототношение довольно уродливое. То же самое можно было бы сделать, используя if-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}))}}})
Любые идеи, если бы я мог как-то сделать, когда пусть считают пустой список/массив/SEQ в качестве ложного, чтобы я мог очистить мой код немного?
очевидно, вы знаете, что: ключ generatedBatches не будет создан, если сгенерированные-UUID, пусто. И вы проверяете пустоту сгенерированных uuids в своем первом решении. Таким образом, вы можете сделать свое первое решение короче, как это (когда (seq generated-uuids) {: generatedBatches (map # (array-map: id%) сгенерированные -uuids)}) – mavbozo