是否预期在所有fdef'函数(例如(st/instrument)
)上启用st/instrument
?例如,假设一个库有一个公共API调用一些内部函数,这些函数已使用fdef进行了spec。如果fdef包括在发布的库中,那么预期调用这些内部函数时应该传递它们指定的fdef,即使它们是内部的?以下是一个示例代码。
(ns my-lib.impl
(:require
[clojure.spec.alpha :as s]))
(defn- do-internal-thing
[x]
x)
(s/fdef do-internal-thing
:args (s/cat :x number?))
(ns my-lib.api
(:require
[clojure.spec.alpha :as s]
[my-lib.impl :as impl]))
(defn do-thing
[y]
(impl/do-internal-thing "oops"))
如果我调用api函数do-thing,我会在调用impl/do-internal-thing
时遇到instrumentation异常。是否应该预期Spec的instrumentation用户筛选出一组fdef'函数并将筛选后的列表传递给st/instrument
,或者这是库应该负责的事情?也许库不应该包括内部函数的fdef?