评论者为:nberger
我们提到,可能在 collect 中将 nil 作为不标记的标志来处理,但我觉得我不太喜欢这个想法。
也许我们可以使用一个命名空间关键字来表示应该忽略标签?类似 {{clojure.test.check.stats/ignore}}。这样我们就可以很容易地在 collect 中实现 {{classify}},通过创建一个当 pred 不匹配时返回 {{stats/ignore}} 的函数。
`
(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}}。