我想看看代表Clojure Spec的数据结构。
如何获取和查看?
例如。给
(s/def ::myspec (s/keys :opt-un [::x ::y]))
我想漂亮地打印myspec的内部表示形式。
答案 0 :(得分:2)
您可以使用s/form
来“将规格作为数据返回”:
(s/form ::myspec)
=> (clojure.spec.alpha/keys :opt-un [:user/x :user/y])
或s/describe
表示同一事物的缩写:
(s/describe ::myspec)
=> (keys :opt-un [:user/x :user/y])
这两者最终都取决于describe*
协议的Spec
方法:
(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]))
因此,每个规范 type 都负责描述自己。例如,地图规范实现仅从其初始输入中重建其文字定义,如下所示:
(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))))