5

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

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

有什么方便的语法糖吗?就像是:

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

3 回答 3

9

使用->宏。

(-> foo f1 f2 f3 f4)

或者reduce

(reduce #(%2 %1) foo [f1 f2 f3 f4])
于 2013-05-27T12:29:15.307 回答
5

有一个线程宏->

(-> foo f1 f2 f3 f4)
于 2013-05-27T12:28:22.277 回答
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))
于 2013-05-27T14:37:41.993 回答