以编程方式计算Clojure中的函数列表

以编程方式计算Clojure中的函数列表,clojure,Clojure,我正在尝试找出如何以编程方式计算函数列表 假设我有以下代码: (defn foo [] (println "foo")) (defn bar [] (println "bar")) (def funcs [foo bar] ) 我希望以编程方式执行funcs的所有函数 我尝试使用评估,但没有成功 感谢您的帮助。如果您想要返回值,并且可以进行惰性评估(在访问返回值之前,不保证调用您的函数),如果您不需要这些值并且这样做是为了立即产生副作用,请使用for (doseq [f [

我正在尝试找出如何以编程方式计算函数列表

假设我有以下代码:

(defn foo
  []
  (println "foo"))

(defn bar
  []
  (println "bar"))

(def funcs [foo bar] )
我希望以编程方式执行
funcs
的所有函数

我尝试使用
评估
,但没有成功


感谢您的帮助。

如果您想要返回值,并且可以进行惰性评估(在访问返回值之前,不保证调用您的函数),如果您不需要这些值并且这样做是为了立即产生副作用,请使用
for

(doseq [f [foo bar]]
  (f))

(def fs
  (for [f [foo bar]]
    (f)))

您可以使用
juxt

((apply juxt funcs))

您可以通过调用简单地映射函数:

(map #(%) funcs)
并可用于强制效果
doall
保留结果,而
dorun
只返回
nil

(defn foo [] :foo) ; no side-effects
(doall (map #(%) [foo foo]))
;=> (:foo :foo)

(defn print-foo [] (println (foo))) ; with side-effects
(dorun (map #(%) [print-foo print-foo]))
;=> :foo
;   :foo
;   nil

酷。谢谢效果很好。