我一直在尝试使用clojure.spec,我对如何使用它的想法是生成用于编辑我指定的地图实例的UI。例如,它可能会生成一个带有datepicker字段的Web表单,该字段用于指定为日期的键,即此类事物。
库中有一个get-spec
方法,但似乎没有任何函数以我需要的方式对规范作为值进行操作。有没有办法做一些事情,比如采取地图规范并将该地图所需的键作为向量返回?这种元编程的规范是否超出了clojure.spec的预期用例?
答案 0 :(得分:7)
使用规范进行元编程肯定属于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]]}}]
然后你可以从那个结构中拔出一组钥匙。