评论者:nberger
bq. 我们讨论了可能在{{collect}}中将nil作为不标记的标志处理,但我觉得这个主意不太好。
或许我们可以使用命名空间关键字来指示应该忽略标签?例如{{clojure.test.check.stats/ignore}}。这样我们就可以很容易地通过创建一个在pred不匹配时返回{{stats/ignore}}的函数,以collect为基础实现{{classify}}。
`
(defn collect
[prop label-fn]
(gen/fmap
(fn [{:keys [args] :as result-map}]
(let [label (apply label-fn args)]
(if (= ::ignore label)
result-map
(update result-map :labels conj label))))
prop))
(defn classify
[prop pred label]
(collect prop (fn [& args]
(if (apply pred args)
label
::ignore))))
`
另一种选择是在{{collect}}中添加一个额外的参数,以接收一个标记是否应将nil视为标记或应该忽略的标志。我更喜欢{{:stats/ignore}}。