我使用re-frame with spec来验证app-db
,就像在todomvc示例中一样。
当用户输入无效条目时,我正在使用s/explain-data
(在重新帧拦截器中)返回一个命名导致验证失败problems
的 icate 的地图。:pred
这个谓词是一个类似的符号project.db/validation-function
。
我的验证函数有元数据,可以从 repl 使用:
(meta #'project.db/validation-function)
函数定义(在project.db
命名空间中)如下所示:
(defn validation-function
"docstring..."
{:error-message "error message"}
[param]
(function-body...)
问题是我无法弄清楚如何动态检索元数据(在project.events
命名空间中工作),例如:
(let [explain-data (s/explain-data spec db)
pred (->> (:cljs.spec.alpha/problems explain-data) first :pred)
msg (what-goes-here? pred)]
msg)
我尝试了以下方法来代替what-goes-here?
:
symbol?
给true
str
给"project.db/validation-function"
meta
给nil
var
给出编译时错误“无法解析 var: p1__46744# in this context”
我认为问题在于我得到了一个符号,但我需要它所引用的 var,这是元数据所在的位置。
我试过使用宏,但真的不知道我在做什么。这是我能找到的最接近的讨论,但我无法解决。
帮助!