Некоторые альтернативы:
Если вы просто хотите добавить связку предметов в коллекцию, содержащуюся в ссылке, начинать одну транзакцию с каждого предмета и conj
раздавать их по отдельности немного расточительно. Вместо этого вы могли бы сделать
(defn init-items []
(dosync (alter items into ["foo" "bar" "baz"])))
Если у вас есть причины делать это по принципу «один элемент за шаг», я думаю, что наиболее идиоматичным и удобным подходом в настоящее время будет использование doseq
:
(defn init-items []
(doseq [item ["foo" "bar" "baz"]]
(dosync (alter items conj item))))
(Или вы можете переместить обертку doseq
в dosync
и не использовать dosync
в теле doseq
.)