【发布时间】:2016-03-03 12:34:34
【问题描述】:
我一直在用另一种语言重新实现一些 Clojure 函数,使用测试作为参考,我对 the tests 对 clojure.core/comp 有点困惑。
(deftest test-comp
(let [c0 (comp)]
(are [x] (= (identity x) (c0 x))
nil
42
[1 2 3]
#{}
:foo)
(are [x y] (= (identity x) (c0 y))
(+ 1 2 3) 6
(keyword "foo") :foo)))
comp 本身只使用一次并且没有参数。这种行为似乎没有记录在案,但the source 表明它只返回identity 函数。
(defn comp
([] identity)
([f] f)
([f g]
(fn
([] (f (g)))
([x] (f (g x)))
([x y] (f (g x y)))
([x y z] (f (g x y z)))
([x y z & args] (f (apply g x y z args)))))
([f g & fs]
(reduce1 comp (list* f g fs))))
这是否意味着这些 arities 中有 3/4 没有经过测试?或者是否有测试保存在其他地方?我通过 GitHub 搜索找到了这些测试,但它们并不总是完全可靠。
为什么零元形式有测试,而它似乎是最没用的变体?
【问题讨论】:
标签: clojure