我是Clojure的新手,我想动态制作一个矢量/列表。
我已经构建了这个函数generate-map
,它返回map
,如:
{:key 1, :value 1, :other [...]}
在另一个功能get-statement
中,我有一个doseq
来调用此generate-map
函数。
(defn get-statement
[st]
(doseq [s st] (generate-map s)))
我想构建一张地图,通过generate-maps
电话加入所有这些doseq
次回复,例如:
[{:key 1, :value 1, :other [...]}
{:key 2, :value 2, :other [...]}
{:key 3, :value 3, :other [...]}]
我该怎么做?谢谢!
答案 0 :(得分:4)
如果您想创建一些地图并将它们放入矢量中,只需使用for
,混合使用vec
或(into [] ...)
:
(into [] ; ... and place them in a vector
(for [d data] ; ...for each datum in data...
(generate-map d))) ; Generate a map...
或mapv
:
(mapv generate-map data) ; Super succinct!
永远不要将doseq
用于此类内容。 doseq
并未返回任何内容,因此您必须使用某些atom
或其他效果混乱来实际获取任何内容。
当您需要执行副作用时使用doseq
,并且不要直接需要任何结果。
如果您在循环后需要结果,请使用for
,map
,reduce
(或任何其他功能循环结构)。