我试图链的一些功能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])
'减少'技巧是可爱的,只是如果一个巴洛克式的:) – vemv
@vemv我认为' - >'是可爱的。 'reduce'选项清楚地显示了操作模式,并且与线程宏不同,它很乐意在编译时采用未知的序列。 –
其实你的with-all-of-them
描述非常接近comp
,除了comp
返回必须调用自己的函数:
(f4 (f3 (f2 (f1 foo))))
== ((comp f4 f3 f2 f1) foo)
因此,with-all-of-them
可能是im赞成如下:
(defn with-all-of-them [arg & fs]
((apply comp fs) arg))
你是指comp? – 2013-05-27 12:19:31
请参阅http://stackoverflow.com/questions/11918554/can-clojure-evaluate-a-chain-of-mixed-arity-functions-and-return-a-partial-funct,看看是否有帮助 – 2013-05-27 12:26:14