【问题标题】:Metaprogramming with clojure.spec values?使用 clojure.spec 值进行元编程?
【发布时间】:2017-05-30 03:40:23
【问题描述】:

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

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

【问题讨论】:

    标签: clojure clojure.spec


    【解决方案1】:

    使用规范进行元编程肯定在 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]]}}]
    

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

    【讨论】:

    • 太棒了,我很高兴听到这是一个计划中的功能——我可以想出很多方法来让它非常有用!
    猜你喜欢
    • 2013-10-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2020-03-20
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多