2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面了解更多关于这个网站如何运作的信息。

0
规格
目前,没有方法可以在测试之外强制函数{{fdef}}验证,也不能通过动态变量覆盖。可以使用以下方式在函数中强制进行验证:a)使用{{:pre}}钩子或b)手动调用{{s/conform}} / {{s/valid?}},但这些不会对函数文档做出贡献。有许多函数始终验证输入的使用场景,例如在应用启动时配置组件,这种情况只需要做一次,因为性能代价不大,正确性更重要。

Schema有{{:always-validate}}元数据用于这种情况


(require '[schema.core :as s])

(s/defn ^:always-validate interceptor-x
  [opts :- {:string? s/Bool}])

(interceptor-x {})
;语法错误编译时出错(ExceptionInfo)在(test.cljc:150:1)。
;interceptor-x的输入与模式不匹配
;
      (missing-required-key {:string? missing-required-key} opts)

2 回答

0

评论由:ikitommi

可能像这样

`
(require '[clojure.spec.alpha :as s])

(defn plus1 [x]
(inc x))

(s/fdef ^:always-validate plus1

    :args (s/cat :x int?))

(plus1 "1")
    ;语法错误编译时出错(ExceptionInfo)在(user.clj:18:1)。
    调用#'{user/plus1}'没有符合规格。
`

0
    
...