我经常需要一个可以验证非空白字符串的规范
`
(s/def ::non-blank-string (complement str/blank?))
(s/valid? ::non-blank-string "foo")
;; => true
`
它会抛出非字符串值并且缺乏生成器
`
(s/exercise ::non-blank-string)
;; => 未捕获的 clojure.lang.ExceptionInfo...
(s/valid? ::non-blank-string 42)
;; => 未捕获的 java.lang.ClassCastException...
`
这可以通过下面的方法解决
`
(s/def ::non-blank-string (s/and string? (complement str/blank?)))
(s/exercise ::non-blank-string)
;; => (["8" "8"] ["pS" "pS"] ["RL" "RL"] ["3" "3"] ["c2ZUx" "c2ZUx"] ["24VF" "24VF"] ["0wc80" "0wc80"] ["Wr49vz" "Wr49vz"] ["1UDte" "1UDte"] ["2f" "2f"])
(s/valid? ::non-blank-string 42)
;; => false
`
问题:在此规范中似乎存在一个反复出现的问题,我最终一次又一次地重新实现它。有时我错误地将它命名为 或为规范创建一个单独的空间,以便我可以重用它。
解决方案:将其制成标准谓词。也许可以将其称为 text?