以编程方式评估 Clojure 中的函数列表

Programmatically evaluate a list of functions in Clojure

我正在尝试找出如何以编程方式评估函数列表。

假设我有这段代码:

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

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

(def funcs [foo bar] )

我想以编程方式执行 funcs 的所有功能。

我尝试使用 eval,但没有成功。

感谢您的帮助。

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

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

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

您可以使用 juxt:

((apply juxt funcs))

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

(map #(%) funcs)

doall and dorun可以用来强制效果。 doall 保留结果,而 dorun 仅 returns 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