less verbose ways of spec'ing records and maps?

半世苍凉 提交于 2019-12-21 23:10:04

问题


Is there a less verbose way of making a spec for a map or a record than the way it is presented in the official spec guide?

(defrecord Person [first-name last-name email phone])
(s/def ::first-name string?)
(s/def ::last-name string?)
(s/def ::email ::email-type)
(s/def ::person (s/keys :req-un [::first-name ::last-name ::email]
                        :opt-un [::phone]))

ideally it would be nice if I could just write something like

(defrecord Person [first-name last-name email phone])
(s/def ::person (s/keys :req-un [:first-name string?
                                :last-name string?
                                :email ::email-type]
                        :opt-un [:phone]))

回答1:


It is Clojure team's conscious decision to have values and key sets spec'ed separately (you can read this discussion for a longer explanation). What you suggest is considered an anti-pattern in clojure.spec and was deliberately made not possible.

If you want single-statement nested structure specs, it is probably better to use Plumatic Schema.



来源:https://stackoverflow.com/questions/42054643/less-verbose-ways-of-specing-records-and-maps

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!