Clojure 中的多态模式验证

2023-11-26

我想使用架构来验证请求对象。映射中的值之一决定哪些其他字段有效。

例如,这些都是有效的:

{ :name "jane" :type :dog :barking true }
{ :name "alan" :type :bird :cheeping true }
{ :name "bert" :type :fish :swimming true }

有些字段是常见的。但其他的则取决于:type.

例如,这将是无效的:

{ :name "phil" :type :bird :barking false }

这样的图式如何表达呢?

我很高兴使用 clj-schema 或 Prismatic 模式。


您可以使用 prismatic.schema 的conditional为了实现这一点:

(s/conditional #(= (:type %) :bird) {:type (s/eq :bird) :chirping s/Bool}
               #(= (:type %) :fish) {:type (s/eq :fish) :swimming s/Bool}
               ...
               :default  {:type (s/eq :animal) :existing s/Bool})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure 中的多态模式验证 的相关文章

随机推荐

  • 从命令行关闭 acrobat reader 的实例

    我正在使用以下 cmd 来打印 pdf acroRD32 exe t file1 pdf printerName 一切正常 但弹出一个窗口 任何人都可以帮我禁用它 我尝试了其中包含的各种选项这个问题但无法成功 任何帮助表示赞赏 为什么还要使
  • IllegalAccessError:类无法访问方法

    我遇到了非常奇怪的错误 因为它仅在从生成的应用程序安装应用程序后发生 apk 当我尝试通过 IDE 运行该应用程序时 它工作正常 java lang IllegalAccessError Method int
  • Phonegap cordova 2.7.0 暂停应用程序时出错

    我使用phonegap工具 create 创建了一个干净的cordova 2 7 0项目 创建项目文件夹包名称项目名称 我已将该应用程序部署到我的 Nexus 4 androind 4 2 2 上 没有编写任何代码 该应用程序已执行 没有错
  • 膨胀类 com.google.android.material.bottomnavigation.BottomNavigationView 时出错

    我正在尝试添加BottomNavigationView我的这个库的布局 implementation com google android material material 1 0 0 这是我的布局
  • 在 PHP 中用单引号打印换行符

    我尝试尽可能多地使用单引号 但我注意到我不能在单引号中使用 n 我知道我可以通过按回车键直接输入换行符 但这会破坏我的代码的缩进 当我使用单引号时 是否有一些 ASCII 字符或我可以输入的字符会产生换行符 不 因为单引号甚至禁止十六进制代
  • 计算忽略搜索引擎的页面浏览量?

    我注意到 StackOverflow 对每个问题都有一个浏览次数 并且这些浏览次数相当低且准确 我的一个网站上也有类似的东西 每当页面加载到后端代码中时 它基本上都会记录一个 点击 不幸的是 它也会对搜索引擎点击次数进行此操作 从而给出臃肿
  • 获取矩形与直线的交点

    我需要得到矩形和直线的交点 我的 B 点位于矩形 矩形中心 内部 A 点位于外部 我需要在矩形边框之一上找到 C 点 我还得到了矩形的宽度和高度 这一切都将是WPF应用程序 所以如果有任何内置功能我会非常高兴 这是基本数学求解线与线相交的问
  • 在 python 正则表达式中匹配 unicode 表情符号

    我需要提取文本中数字和表情符号之间的文本 示例文本 blah xzuyguhbc ibcbb bqw 2 extract1 jbjhcb 6 extract2 bjvcvvv output extract1 extract2 我编写的正则表
  • 在 Flutter 中使用 Firebase 身份验证检查用户是否是新用户

    根据底部这一页 AdditionalUserInfo提供了一个方法叫做isNewUser 例如 检查社交登录 Facebook Google 等 是否是登录或注册 给出了一个例子这个答案 Flutter 的问题是我找不到任何名为Additi
  • 并行运行一组 TaskEithers,但如果 1 个或多个任务失败则继续

    我必须并行进行一组 IO 调用 如果成功则合并调用的内 容 如果其中一个失败 其他的将按正常方式处理 但会出现一条错误消息 我对如何实现这一点的思考过程 Array
  • For-In 循环多个条件

    随着 Xcode 7 3 的新更新 出现了很多与新版本 Swift 3 相关的问题 其中一个问题是 C 风格的 for 语句已被弃用 将在未来版本的 Swift 中删除 这出现在传统的 Swift 版本中 for声明 其中一个循环有多个条件
  • 更改导航后退按钮的目的地

    如何更改默认导航后退按钮将我带到的视图控制器 后退按钮通常会将您带回到上一个视图控制器 但是如果我想让它通过两个视图控制器返回怎么办 我的意思是我想更改后退按钮将我带到的视图控制器 我不喜欢创建自定义后退按钮 那么还有其他办法吗 可能是与后
  • 不同方法名的接口实现

    我有这个界面 public interface INameScope void Register string name object scopedElement object Find string name void Unregiste
  • 对于不使用 Emacs 的 Windows 用户是否值得交换 Ctrl 和 Caps Lock

    我已经了解 Steve Yegge 的建议交换 Ctrl 和 Caps Lock虽然我不使用 Emacs 但已经有一段时间了 我刚刚尝试将它们交换作为实验 但发现很难调整 现在有几个快捷键对我来说已经是第二天性了 但我还没有意识到它们在我使
  • 使用正则表达式进行 LDAP 搜索

    有没有办法可以使用字段的正则表达式在 LDAP 上进行搜索 我在用LDAP搜索或 Sun Java System Directory Server 控制中心 进行搜索 答案是否定的 你不能 为什么 因为 LDAP 标准将 LDAP SEAR
  • Python。 Matplotlib 倒置图像

    我不知道这里出了什么问题 import matplotlib pyplot as plt im plt imshow plt imread tas png plt show 并且Y轴反转了 所以我写了一篇论证origin lower im
  • 将数学表达式中的^(幂)符号替换为C的pow语法

    我有一个数学表达式 例如 2 x 3 2 x 5 7 10 0 5 我需要更换 符号到powC语言的函数 我认为正则表达式是我所需要的 但我不知道像专业人士那样的正则表达式 所以我最终得到了这个正则表达式 s s 我不知道如何改进这一点 你
  • 在父级 Shiny 服务器中调用反应式数据集的 Shiny 模块

    我正在寻求移植一些较旧的闪亮应用程序以使用闪亮模块 但在尝试移植我的反应式表达式时遇到了麻烦 根据文档 目标不是阻止模块与其交互 包含应用程序 而是使这些交互变得明确 如果一个 模块需要使用反应式表达式 取反应式 表达式作为函数参数 我有现
  • Monotouch和XCode 4,风口去哪儿了?

    今天我用最新版本的 MonoDevelop MonoTouch 和 Mono Framework 更新了我的 mac 我还下载了最新版本的 XCode 版本 4 一个漂亮的 4 5 gig 下载 起初我没有注意到它 因为我正忙着将代码复制到
  • Clojure 中的多态模式验证

    我想使用架构来验证请求对象 映射中的值之一决定哪些其他字段有效 例如 这些都是有效的 name jane type dog barking true name alan type bird cheeping true name bert t