0

何らかの理由で、以下の仕様は、指定されたセットの一部であってもfalse有効ではないと言っています。::a-thing

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

(spec/def ::a-thing #{:a :b :c false})

(spec/valid? ::a-thing :a)     ; => true
(spec/valid? ::a-thing :d)     ; => false
(spec/valid? ::a-thing false)  ; => false
4

2 に答える 2

1

Spec に与えられたセットでは、関数ではなくメンバーシップをチェックする関数としてセット自体を使用するため、虚偽のものが許可されていないことが判明しましたcontains?。以下でわかるように、セットがセットのメンバーである場合、セットは指定された引数を返し、そうでない場合は nil を返します。

(#{:a :b :c false} :a)    ; => :a
(#{:a :b :c false} false) ; => false
(#{:a :b :c false} :d)    ; => nil

もちろん、これが誤解の原因です。

contains仕様を適切に機能させるには、セットを自分自身で手動でラップする必要があります。

(spec/def ::a-thing #(contains? #{:a :b :c false} %))
于 2017-05-24T15:24:47.483 に答える