【发布时间】:2022-08-16 11:04:50
【问题描述】:
我想使用用户定义的正则表达式模式来定义 edn 文件中的日期,以使用 malli 进行验证。 我如何在 core.clojure 中定义这个模式,以便我可以在 edn 文件中使用它。
这就是我的 edn 文件以前的样子。
(def reading-schema
[:map
[:readingDate :re #\"\\d{4}-\\d{2}-\\d{2}\"]
[:readingType string?]
[:readingPrecision string?]
[:readingEstimate string?]])
(def readingDetails-schema
[:map
[:readingCode string?]
[:readingNumber string?]
[:readingCheck string?]
[:readings [:vector reading-schema]]])
但我无法将其加载到 core.clj。如何解决这个问题?一种方法是在 clojure 中定义。但我不知道该怎么做。
假设这就是我如何将我的 /edn 文件定义为将所有模式放在一个位置。
{
:reading-schema [:map
[:readingDate :re #\"\\d{4}-\\d{2}-\\d{2}\"]
[:readingType string?]
[:readingPrecision string?]
[:readingEstimate string?]]
:readingDetails-schema [:map
[:readingCode string?]
[:readingNumber string?]
[:readingCheck string?]
[:readings [:vector reading-schema]]]
}
在 core.clj 中,我使用 malli 用来调用任何 edn 文件的 aero 库来调用它。
编辑: 这是我面临的错误:
Execution error at aero.core/read-pr-into-tagged-literal (core.cljc:180).
No dispatch macro for: \"
-
\“但我无法加载这个\” - 请添加你得到的错误。你也真的想要有
def吗?你真的想加载这个文件吗?代码并且您的应用程序的用户应该是 apbel 来提供此文件?在这种情况下,你可以告诉用户创建这个文件,把它放在类路径上,然后你require它。 -
是的,我现在添加了错误。我正在使用 def 进行检查,因为我想签入 repl。因此,我在旅途中定义方案并进行检查。现在我想将所有模式存储在一个 edn 文件中。
标签: validation clojure schema malli