我知道该->表单可用于将一个函数结果的结果传递给另一个:
(f1 (f2 (f3 x)))
(-> x f3 f2 f1) ; equivalent to the line above
Run Code Online (Sandbox Code Playgroud)
但是,此表单要求您知道要在设计时使用的功能.我想做同样的事情,但在运行时使用任意函数列表.
我已经编写了这个循环函数,但是我觉得有更好的方法:
(defn pipe [initialData, functions]
(loop [
frontFunc (first functions)
restFuncs (rest functions)
data initialData ]
(if frontFunc
(recur (first restFuncs) (rest restFuncs) (frontFunc data) )
data )
) )
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
clojure ×1