难道期望所有已经fdef'过的函数都启用 st/instrument
吗?(例如,(st/instrument)
)?例如,假设一个库有一个公共API调用一些带有fdef的内部函数。如果fdefs包含在发布的库中,是否期望即使在内部,对那些内部函数的调用也应传递它们的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
,或者这是库应该维护的事情?或许库不应在内部函数中包含fdefs?