7

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

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

4

1 回答 1

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

然后,您可以从该结构中取出一组键。

于 2017-01-16T03:02:05.027 回答