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

欢迎!请参阅关于页面以了解有关如何工作的更多信息。

0 投票
ClojureScript
观察如果你在Clojure中尝试在未定义的spec上使用{{s/with-gen}}会发生什么


Clojure 1.10.0
user=> (require '[clojure.spec.alpha :as s])
nil
user=> (s/def ::foo (s/with-gen ::bar #(s/gen #{:a})))
语法错误(IllegalArgumentException)在(REPL:1:14)编译时。
没有找到协议:#'#clojure.spec.alpha/Specize中方法::specize*的类:nil的实现。


另一方面,在ClojureScript中,它们不会快速失败,并且当它们稍后失败时,错误对开发人员来说可能有些难以理解


$ clj -Sdeps '{:deps {org.clojure/clojurescript {:mvn/version "1.10.439"}}}' -m cljs.main
ClojureScript 1.10.439
cljs.user=> (require '[clojure.spec.alpha :as s])
nil
cljs.user=> (s/def ::foo (s/with-gen ::bar #(s/gen #{:a})))
:cljs.user/foo
cljs.user=> (s/valid? ::foo 10)
TypeError: null is not an object (evaluating 'self__.pred.call')
     cljs$spec$alpha$Spec$conform_STAR_$arity$2 (cljs/spec/alpha.cljs:526:35)
     cljs.spec.alpha/conform* (cljs/spec/alpha.cljs:40:14)
     cljs$core$IFn$_invoke$arity$2 (cljs/spec/alpha.cljs:375:22)
     cljs$spec$alpha$valid_QMARK_ (cljs/spec/alpha.cljs:371:1)
cljs.user=>

1 答案

0 投票
...