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? ...
2番目のケースでエラーが発生しますが、最初のケースでエラーが発生するのはなぜですか。これは私が気付いていない、またはバグという区別を伴う機能ですか?
私が直接::bar
を定義した場合、エラーがないことを
注:
user=> (s/def ::bar (s/and number? pos?))
:user/bar
ああ、私の多面的な混乱を解決してくれてありがとう。 – Mars