如何在 clojure 中定义用户定义的数据类型?

2024-03-23

我想使用用户定义的正则表达式模式来定义 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 中,我使用 aero 库来调用它,malli 使用该库来调用任何 edn 文件。


编辑: 这是我面临的错误:

Execution error at aero.core/read-pr-into-tagged-literal (core.cljc:180).
No dispatch macro for: "

EDN 不支持所有阅读器宏(或“功能”)(查看内置标记元素 https://github.com/edn-format/edn#built-in-tagged-elements) Clojure 阅读器支持。但您可以轻松添加自己的读者(请参阅:readers of opts):

user=> (doc clojure.edn/read)
-------------------------
clojure.edn/read
([] [stream] [opts stream])
  Reads the next object from stream, which must be an instance of
  java.io.PushbackReader or some derivee.  stream defaults to the
  current value of *in*.

  Reads data in the edn format (subset of Clojure data):
  http://edn-format.org

  opts is a map that can include the following keys:
  :eof - value to return on end-of-file. When not supplied, eof throws an exception.
  :readers  - a map of tag symbols to data-reader functions to be considered before default-data-readers.
              When not supplied, only the default-data-readers will be used.
  :default - A function of two args, that will, if present and no reader is found for a tag,
             be called with the tag and the value.

例如:添加一个阅读器re,然后可以将其放置在字符串之前,如下所示#re在您的 EDN 文件中。

(require '[clojure.edn :as edn])

(let [re (edn/read-string
           {:readers {'re re-pattern}} ; XXX
           (slurp "schema.edn"))]
  (assert (re-matches re "2022-01-01")))

使用这个schema.edn

#re "\\d{4}-\\d{2}-\\d{2}"

(注意\在原始正则表达式中 - 在字符串中您需要转义它们)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 clojure 中定义用户定义的数据类型? 的相关文章

  • 使用 ProGuard 混淆 clojure uberjar

    我想知道是否有人有使用 proguard 混淆他们的 leiningen 编译的 uberjar 的经验 我已经尽力在谷歌上寻找解决方案 但找不到真正的答案 我想知道这是否可能 我一直在尝试混淆默认的 lein 项目 这是 core clj
  • 这两个 clojure 函数之间有什么区别和问题?

    对于课程项目的一部分 我正在实现一个函数来从文件中读取一些数据并根据该文件创建图形结构 一整天我问了几个问题 结果就是这样 下面是一个可以正常工作的函数 它首先以惰性序列的形式读入文件 然后循环解析每一行并将其打印出来 defn print
  • 如何应用Clojure? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习 Clojure 我真的很喜欢它的一些功能 是时候考虑一 些真正的 宠物项目 了 我意识到我不知道如何真正做到这一点use克
  • 属性列表后缺少 jquery 验证 }

    我这里有这个代码 order validate rules name required true lastname required true address required true telephone required true di
  • 在 Cocoa 应用程序中验证用户输入的 URL 的最佳方法是什么?

    我正在尝试构建一个自制的网络浏览器 以更加熟练地使用 Cocoa 我需要一种好方法来验证用户是否输入了有效的 URL 我尝试过一些正则表达式 但 NSString 有一些有趣的怪癖 并且不喜欢我见过的大多数正则表达式使用的一些反引号 你可以
  • 如何在 CQRS 中处理基于集合的一致性验证?

    我有一个相当简单的域模型 涉及一系列Facility聚合根 鉴于我使用 CQRS 和事件总线来处理从域引发的事件 您如何处理集合的验证 例如 假设我有以下需求 Facility必须有一个唯一的名称 由于我在查询端使用最终一致的数据库 因此在
  • 电话号码的正则表达式,不允许全零

    需要您的正则表达式帮助 我当前的正则表达式是 d 8 最小长度为 8 不允许包含字母 特殊字符和空格 我还想禁止全零 如 00000000 Thanks 该模式应该可以满足您的需求 0 d 8 The 0 部分是负前瞻 将阻止仅输入零 Ex
  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • Scala - Java = ? (或者 Clojure - Java = ?)

    开发人员可以在不懂 Java 的情况下使用 Scala 吗 开发人员可以在不懂 Java 的情况下使用 Clojure 吗 注意 例如 我是一名 C 开发人员 我在不了解任何 VB 的情况下使用 NET 当然 WF 4 0 使用 VB 进行
  • 我想在后端验证来自 golang 前端的时区

    前端在注册期间发送时区以及其他用户详细信息 我需要在时区上放置一个验证器来进行 api 测试 时区数据的格式为 GMT 10 00 Hawaii GMT 08 00 Pacific Time US amp Canada 我所做的是定义数组中
  • Firebird数据库模式/数据差异工具

    RedGate http www red gate com为 Microsoft SQL Server 制作一个工具 允许您捕获两个数据库之间的差异 它生成更新数据库模式所需的脚本 同时保留数据 我需要为 Firebird 数据库找到这样的
  • TSQL 定义临时表(或表变量)而不定义架构?

    有没有一种方法可以定义临时表而无需预先定义其架构 实际上 使用表 VARIABLE 内存表 是最佳方法 table 在临时数据库中创建一个表 而 table 是全局的 两者都具有磁盘命中 考虑交易数量所经历的放缓 打击 CREATE PRO
  • 如何降低圈复杂度?

    我正在开发一个将 RequestDTO 发送到 Web 服务的类 我需要在发送请求之前验证该请求 请求可以从 3 个不同的地方发送 并且每个 请求类型 有不同的验证规则 例如请求1必须有姓名和电话号码 请求2必须有地址等 我有一个 DTO
  • Django 和自定义表单验证

    我正在尝试创建一个自定义表单字段并对其进行验证 这是 Django 1 0 版本 这是我的表单对象 class UsernameField forms CharField def clean self values print 我是这样称呼
  • 有没有办法调用 VBA(MS Access 2002 或 2003)中任何控件的 BeforeUpdate 事件过程?

    在 VBA 中 我正在更改 Access 表单中的一些控件的值 我喜欢在执行此操作后运行这些控件的 BeforeUpdate 事件 因为它会检查字段之间的一致性 Private Sub ExampleProc1 Dim intCancel
  • ASCII“../”是 PHP 中指示目录遍历的唯一字节序列吗?

    我有一个 PHP 应用程序 它使用 GET参数来选择文件系统上的 JS CSS 文件 如果我拒绝输入字符串包含的所有请求 或者可见 7 位 ASCII 范围之外的字节 当路径传递到 PHP 的底层 基于 C 文件函数时 这是否足以防止父目录
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 验证美国的电话号码是否存在

    我想用 C 验证美国的给定电话号码 是否有任何API或其他东西可以帮助程序员验证电话号码存在 我不仅想验证它们是否与美国电话号码的格式匹配 还想验证它们的存在 提前致谢 您可以使用正则表达式验证电话号码格式 例如 但为了验证该电话号码是否确
  • jquery.validate:多个远程规则

    我计划使用两个远程规则验证单个文本字段 更多这样的 form validate rules remote url1 php remote url2 php messages remote Error1 remote Error2 这可能吗
  • Clojure 宏expand

    Why does macroexpand arm getHand getFinger 扩展到 arm getHand getFinger while macroexpand gt arm getHand getFinger 扩展到 getF

随机推荐

  • System.Drawing - 参数无效

    经过更多测试后 我发现此问题可能是由于图像未及时加载以克隆到位图并显示所致 这可能还是不可能 注意 是的 标题中还有其他与此错误相关的问题 但从一些研究来看 它似乎是一个含糊不清的错误 有许多可能的原因 我没有发现任何与我的情况相同的问题
  • Angular 代码与我的 python django 应用程序配合不佳

    由于某种原因 我无法让我的角度代码与我的 python django 应用程序很好地配合 当我提交页面时 它会将所有空值保存在我的数据库中 并且我的获取响应也无法正常工作 因为没有返回任何内容 任何帮助将不胜感激 我还提供了屏幕截图 以便更
  • 错误消息存储在SESSION中

    将错误消息存储在中是一个好习惯吗SESSION 例如重定向后 通过 url 传递对我来说不是一个解决方案 我想知道这是否是一个好的解决方案 因为 用户并发提交会导致问题吗 一篇耗时很长的文章 而ajax内容是从另一个选项卡获取的 这可能会搞
  • ldap 组件 Symfony3 配置和设置

    编写 Symfony3 应用程序并尝试配置 symfony ldap 组件来验证用户身份并从我的 AD 服务器检索用户属性 据我了解 我需要安装LDAP组件 https symfony com doc current components
  • 如何使用 while() 循环在 vertx 上运行无限循环

    我想在不同线程上的 verx 上运行无限循环 应该是这样的 vertx executeBlocking future gt while true some logic e g waiting on blocking code 事实是 在 v
  • java中的模糊逻辑

    我得到了一个涉及模糊逻辑的新项目模块 是为了确定不同的水凝物 http en wikipedia org wiki Precipitation meteorology Hydrometeor使用模糊逻辑方法 我对模糊逻辑是什么知之甚少 所以
  • Phonegap InAppBrowser - 后退按钮不会转到上一页

    我的应用程序使用 Phonegap 我需要在 InAppBrowser 中显示外部链接 但看起来后按钮没有按预期工作 如果我这样做 var ref window open www example com a html blank locat
  • 在 OS X 上的 virtualenv 中安装 scrapy 加密时发生错误 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在安装 scrapypip in virtualenv on OS X 10 11 当它安装密码学时 它说 buil
  • mysql 使用主键而不是索引

    我有一个相当大的表 有几百万行 ID primary countrycode status flag cc 我尝试了以下sql语句 但速度很慢 SELECT id countrycode status flag cc FROM table
  • tar:懦弱地拒绝创建空档案

    我使用以下 tar 命令尝试备份整个文件系统 tar cvpzf test backup tar gz exclude test 我收到以下错误消息 tar Cowardly refusing to create an empty arch
  • Angular - 错误 TS2345:“字符串 | 类型的参数” null' 不能分配给'string' 类型的参数

    我的身份验证服务中有这个 constructor private http HttpClient private router Router append headers set token if saved in local storag
  • Node.js UnhandledPromiseRejectionWarning 即使在捕获它之后

    我正在使用 Node 7 2 1 和新版本异步 等待特征 我还将 Native ES6 Promises 与 mongoose 一起使用 如下所示 const mongoose require mongoose mongoose Promi
  • 如何使用 XSLT 修改 SVG 属性

    如何使用 XSLT 修改 SVG 文件 我喜欢修改以下 SVG 剪切 文件
  • Composer 无法在 docker 容器中工作:“https://packagist.org/packages.json”不包含有效的 JSON

    我有一个运行 Symfony 应用程序的 docker 容器 运行良好 Composer 安装 需要命令 例如composer require annotations 容器内经常会失败并出现以下错误 Seld JsonLint Parsin
  • 聚合框架中的 $skip 和 $limit

    当我阅读该文档时 我发现以下注释 当管道中 sort 紧邻 limit 之前时 sort 操作仅在进行时保留前 n 个结果 其中 n 是指定的限制 并且 MongoDB 只需要在内存中存储 n 个项目 当allowDiskUse为true并
  • 如何在WPF中正确绑定ListBoxItem?

    我有一个列表框 我想迭代 Foo 对象中的 Bars 集合
  • Django Middleware - 如何编辑 Django Response 对象的 HTML?

    我正在创建一个自定义中间件来 django 编辑响应对象以充当审查员 我想找到一种方法来进行搜索和替换 用我选择的单词替换某个单词的所有实例 我已经创建了我的中间件对象 并将其添加到我的MIDDLEWARE CLASSES在设置中并将其设置
  • 强制 asp.net 下拉列表展开

    我有一个 ASP NET 数据绑定下拉列表 它是根据文本框的内容填充的 填充后 我想自动展开下拉列表 以便用户意识到需要做出选择 而不需要单击下拉列表来展开它 似乎没有属性或方法可以做到这一点 编辑 在尝试了 Ed B 的示例后 我仍然陷入
  • Scala 缓慢构建:要避免的开发方法

    首先 通过 SBT 进行的增量构建非常棒 通常在 更改为一个文件然后触发数十个其他文件的编译 这就是 Scala 开发变得不那么 有趣的时候 因为由此导致的工作流程减慢可能会鼓励上下文切换 检查电子邮件 最新的 Stackoverflow
  • 如何在 clojure 中定义用户定义的数据类型?

    我想使用用户定义的正则表达式模式来定义 edn 文件中的日期 以便使用 malli 进行验证 我如何在 core clojure 中定义此模式 以便我可以在 edn 文件中使用它 这就是我之前的 edn 文件的样子 def reading