我一直在尝试使用clojure.spec,我对如何使用它的想法是生成用于编辑我指定的地图实例的UI.例如,它可能会生成一个带有datepicker字段的Web表单,该字段用于指定为日期的键,即此类事物.
get-spec
库中有一个方法,但似乎没有任何函数按照我需要的方式操作规范值.有没有办法做一些事情,比如采取地图规范并将该地图所需的键作为向量返回?这种元编程是否符合clojure.spec的预期用例之外的规范?
使用规范进行元编程肯定属于clojure.spec的预期用例.
我们尚未发布(但已编写并打算)规范表格规格.通过这些,可以使规范形式本身符合并返回表示规范的数据结构,该规范可用于(例如)从地图规范中获取所需的密钥.
符合:: spec规范可能如下所示:
user=> (s/def ::name string?) :user/name user=> (s/def ::m (s/keys :req [::name])) :user/m user=> (s/conform ::spec (s/form ::m)) [:form {:s clojure.spec/keys, :args {:req [[:key :user/name]]}}]
然后你可以从那个结构中拔出一组键.