更简洁的方法来记录记录和地图?

时间:2017-02-05 16:46:38

标签: clojure clojure.spec

制作地图或记录规范的方式是否比官方规范指南中的方式更简洁?

(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]))

理想情况下,如果我能写出像

这样的东西会很好
(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 个答案:

答案 0 :(得分:5)

这是Clojure团队有意识的决定to have values and key sets spec'ed separately(您可以阅读this讨论以获得更长的解释)。你的建议被认为是clojure.spec中的反模式,故意made not possible

如果您想要单语句嵌套结构规范,最好使用Plumatic Schema