2024 Clojure 状态调查 中分享您的想法!

欢迎!请查看关于页面以获取更多关于此功能的信息。

+4
规范

我经常需要一个可以验证非空白字符串的规范

`
(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?

1 个答案

+2
参考:https://clojure.atlassian.net/browse/CLJ-2503(由 alex+import 报告)
...