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
`

问题:这个规范里的需求似乎是个反复出现的常见问题,我不断地重新实现它。有时我会将其命名为 ::non-empty-string,或者创建一个包含该规范的独立命名空间,以便能够重用它。

解决方案:将其做成标准谓词。可能可以将其命名为 text?

1个答案

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