我还没有在运行代码中遇到过这种情况,所以可能由于我没有理解到的某种原因,这是不可能的。同时,也不确定是否需要修复reducers的问题,考虑到transducers。这是在测试Eastwood lint工具对某些Clojure命名空间进行的时候发现的,包括clojure.core.reducers。
(defcurried mapcat
"将f应用于coll的全局组合的每个值,连接(f val)的结果
colls。折叠。
{:added "1.5"}
[f coll]
(folder coll
(fn [f1]
(let [f1 (fn
([ret v]
(let [x (f1 ret v)] (if (reduced? x) (reduced x) x)))
([ret k v]
(let [x (f1 ret k v)] (if (reduced? x) (reduced x) x))))]
(rfn [f1 k]
([ret k v]
(reduce f1 ret (f k v))))))))
宏rfn的定义扩展为可以无参数调用f1的(fn ...),这并非f1定义的参数个数。