TL;DR

  • s/and は複数の述語を AND 条件で組み合わせた新しい Spec を作る。
  • s/or を使うと、文字列かキーワードかのような OR 条件の Spec も書ける。

内容

Spec は自分で定義することもできる。たとえば次は、値が 0〜100 の間に収まっているかを確かめる Spec である。

(def valid-%? (s/and number? #(>= % 0) #(<= % 100)))

s/and は、渡された複数の述語を AND 条件で組み合わせた、新しい Spec を作る関数である。ここで使っている #(…) は無名関数の糖衣構文で、% は引数を表す。

自作した Spec は valid? で次のように使える。

(s/valid? valid-%? 42)  ; true
(s/valid? valid-%? 105) ; false

同じように、文字列かキーワードかを確かめる Spec は次のように書ける。

(def string-or-symbol?
  (s/or :string string? :keyword keyword?))

キーワード