我正在尝试弄清楚如何以编程方式评估函数列表。
让我们说我有这段代码:
(defn foo
[]
(println "foo"))
(defn bar
[]
(println "bar"))
(def funcs [foo bar] )
我希望以编程方式执行funcs
的所有功能。
我尝试使用eval
,但没有成功。
感谢您的帮助。
答案 0 :(得分:5)
如果你想要返回值,可以使用for
,并且在进行延迟评估时可以正常使用(在访问返回值之前不能保证调用你的函数),如果你没有&#39则使用doseq
; t需要这些值,并且这样做是为了立即产生副作用。
(doseq [f [foo bar]]
(f))
(def fs
(for [f [foo bar]]
(f)))
答案 1 :(得分:4)
您可以使用juxt
:
((apply juxt funcs))
答案 2 :(得分:1)