【发布时间】:2021-09-15 18:11:23
【问题描述】:
我希望根据我从请求中提取的一些数据生成一组规范。我想根据收到的数据动态定义一些规范。
(def my-key :frame-data/pretty_name) ;;imagine this and the validator aren't hardcoded
(def validator string?)
(s/def my-key validator?) ;; defines my-ns/my-key, instead of `:frame-data/pretty_name.
(s/describe my-key) ;; string? ;;which sorta works, but its looking up `my-ns/my-key` instead of :frame-data/pretty_name
我的目标是有一个看起来像我写的规范:
(s/def :frame-data/pretty_name string?)
我是 clojure 的新手,所以我不知道如何完成它,但我尝试了一些方法:
(s/def (eval my-key) validator) ;;Assert Failed: k must be a namespaced keyword or resolveable symbol
(definemacro def-spec [key validator]
'(s/def ~key ~validator))
(def-spec my-key validator) ;; my-ns/my-key ;; returns the same as earlier
还有很多变化,但我不确定如何动态定义规范,但感觉应该是这样。
【问题讨论】:
标签: clojure clojure.spec