我正在尝试在 Clojure 中链接一些函数:
(f4 (f3 (f2 (f1 foo))))
有什么方便的语法糖吗?就像是:
(with-all-of-them foo f1 f2 f3 f4)
我正在尝试在 Clojure 中链接一些函数:
(f4 (f3 (f2 (f1 foo))))
有什么方便的语法糖吗?就像是:
(with-all-of-them foo f1 f2 f3 f4)
使用->
宏。
(-> foo f1 f2 f3 f4)
或者reduce
:
(reduce #(%2 %1) foo [f1 f2 f3 f4])
有一个线程宏->
:
(-> foo f1 f2 f3 f4)
实际上,您对 的描述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))