我是 Clojure 的新手,我想动态构建一个向量/列表。
我构建了这个generate-map
返回 a 的函数map
,例如:
{:key 1, :value 1, :other [...]}
Run Code Online (Sandbox Code Playgroud)
在这个其他函数中get-statement
,我调用了doseq
这个generate-map
函数。
(defn get-statement
[st]
(doseq [s st] (generate-map s)))
Run Code Online (Sandbox Code Playgroud)
我想构建一张地图,generate-maps
通过调用连接所有这些返回doseq
,例如:
[{:key 1, :value 1, :other [...]}
{:key 2, :value 2, :other [...]}
{:key 3, :value 3, :other [...]}]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?谢谢!
如果你想创建一些地图,并将它们放入向量中,只需使用 a for
,与vec
或混合(into [] ...)
:
(into [] ; ... and place them in a vector
(for [d data] ; ...for each datum in data...
(generate-map d))) ; Generate a map...
Run Code Online (Sandbox Code Playgroud)
或者mapv
:
(mapv generate-map data) ; Super succinct!
Run Code Online (Sandbox Code Playgroud)
切勿用于doseq
此类用途。doseq
不返回任何内容,因此您必须使用一些atom
或其他效果混乱才能真正从循环中获取任何内容。
doseq
当您需要执行副作用但不直接需要它的任何结果时使用。
如果循环后需要结果,请使用for
, map
, (或任何其他功能循环构造)。reduce