如何获得Clojure规范作为对象?

如何获得Clojure规范作为对象?,clojure,clojure.spec,Clojure,Clojure.spec,我想看看代表Clojure规范的数据结构 我怎样才能进去看看呢 给定的 (s/def ::myspec (s/keys :opt-un [::x ::y])) 我想漂亮地打印myspec的内部表示。您可以使用s/form将规范作为数据返回: 或s/description用于同一事物的缩写版本: (s/describe ::myspec) => (keys :opt-un [:user/x :user/y]) 这两者最终取决于Spec协议的descripe*方法: (defprotoco

我想看看代表Clojure规范的数据结构

我怎样才能进去看看呢

给定的

(s/def ::myspec (s/keys :opt-un [::x ::y]))

我想漂亮地打印myspec的内部表示。

您可以使用
s/form
将规范作为数据返回:

s/description
用于同一事物的缩写版本:

(s/describe ::myspec)
=> (keys :opt-un [:user/x :user/y])
这两者最终取决于
Spec
协议的
descripe*
方法:

(defprotocol Spec
  (conform* [spec x])
  (unform* [spec y])
  (explain* [spec path via in x])
  (gen* [spec overrides path rmap])
  (with-gen* [spec gfn])
  (describe* [spec]))
因此,每个规范类型都负责描述自己。例如,map spec实现只是根据其初始输入重建其文字定义,如下所示:

(describe* [_] (cons `keys
                      (cond-> []
                              req (conj :req req)
                              opt (conj :opt opt)
                              req-un (conj :req-un req-un)
                              opt-un (conj :opt-un opt-un))))

您可以使用“将规范作为数据返回”的
s/form

s/description
用于同一事物的缩写版本:

(s/describe ::myspec)
=> (keys :opt-un [:user/x :user/y])
这两者最终取决于
Spec
协议的
descripe*
方法:

(defprotocol Spec
  (conform* [spec x])
  (unform* [spec y])
  (explain* [spec path via in x])
  (gen* [spec overrides path rmap])
  (with-gen* [spec gfn])
  (describe* [spec]))
因此,每个规范类型都负责描述自己。例如,map spec实现只是根据其初始输入重建其文字定义,如下所示:

(describe* [_] (cons `keys
                      (cond-> []
                              req (conj :req req)
                              opt (conj :opt opt)
                              req-un (conj :req-un req-un)
                              opt-un (conj :opt-un opt-un))))