В Clojure 1.9.0-alpha13 я могу определить предикат спецификации, используя spec/and
и integer?
, но не and
и number?
, как оказалось. Это озадачивает. Также вызывает недоумение тот факт, что при определении предиката ошибки не возникает, а возникает только тогда, когда я пытаюсь определить спецификацию, используя его.
user=> (use '[clojure.spec :as s])
...
nil
user=> (s/def pos-int? (s/and integer? pos?))
user/pos-int?
user=> (s/def ::foo pos-int?)
:user/foo
user=> (s/def pos-num? (s/and number? pos?))
user/pos-num?
user=> (s/def ::bar pos-num?)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: pos-num? ...
Почему во втором случае я получаю ошибку, а в первом нет? Является ли это особенностью, о которой я не знаю, или ошибкой?
Обратите внимание, что нет ошибки, если я определяю ::bar
напрямую:
user=> (s/def ::bar (s/and number? pos?))
:user/bar