使用clojure.spec值进行元编程?

时间:2017-01-15 02:07:22

标签: clojure clojure.spec

我一直在尝试使用clojure.spec,我对如何使用它的想法是生成用于编辑我指定的地图实例的UI。例如,它可能会生成一个带有datepicker字段的Web表单,该字段用于指定为日期的键,即此类事物。

库中有一个get-spec方法,但似乎没有任何函数以我需要的方式对规范作为值进行操作。有没有办法做一些事情,比如采取地图规范并将该地图所需的键作为向量返回?这种元编程的规范是否超出了clojure.spec的预期用例?

1 个答案:

答案 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]]}}]

然后你可以从那个结构中拔出一组钥匙。