如何链接多个功能?

时间:2013-05-27 12:15:55

标签: clojure

我正在尝试在Clojure中链接一些函数:

(f4 (f3 (f2 (f1 foo))))

这有什么方便的语法糖吗?类似的东西:

(with-all-of-them foo f1 f2 f3 f4)

3 个答案:

答案 0 :(得分:9)

使用->宏。

(-> foo f1 f2 f3 f4)

reduce

(reduce #(%2 %1) foo [f1 f2 f3 f4])

答案 1 :(得分:5)

有一个threading macro ->

(-> foo f1 f2 f3 f4)

答案 2 :(得分:4)

实际上,您对with-all-of-them的描述非常接近comp,但comp会返回您必须自己调用的函数:

(f4 (f3 (f2 (f1 foo)))) == ((comp f4 f3 f2 f1) foo)

因此,with-all-of-them可以按如下方式实施:

(defn with-all-of-them [arg & fs]
   ((apply comp fs) arg))