我在运行代码时从未遇到过这种情况,所以可能是因为我没有理解的原因而不可能发生。另外,鉴于 transducers,我不确定修复 reducers 的问题是否具有任何重要性。这是在测试 Eastwood 检查工具有关 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 的定义展开为可以调用无参数的 (fn ...),但这不是 f1 的定义多重数。