Я использую re-frame с spec для проверки app-db
, очень как в примере todomvc .
Когда пользователь вводит недопустимую запись, я использую s/explain-data
(в перехватчике перекадровых данных), чтобы вернуть карту problems
с наименованием :pred
, что вызвало ошибку проверки. Этот предикат является символом типа project.db/validation-function
.
Моя функция проверки имеет метаданные, которые доступны из отчета с помощью:
(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 # в этом контексте"
Я думаю, что проблема в том, что я получаю символ, но мне нужна переменная, на которую он ссылается, - это место, где живут метаданные.
Я пытался использовать макрос, но на самом деле не знаю, что я делаю. * * * * * * * * * * * * * * * * * * * * * * * * * - самое близкое обсуждение, которое я мог найти, но я не мог решить это.
Помощь!