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 中的多态模式验证 的相关文章

  • clojure 要求语法原理

    我很难理解 因此记住 此处描述的 clojure require 语法 http clojuredocs org clojure core 1 3 0 clojure core require http clojuredocs org cl
  • 如何存储没有年份部分的生日?

    类似问题 Postgres 生日选择 https stackoverflow com questions 6913719 postgres birthdays selection 我们正在设计一项新功能 我们将存储人们生日的月份和日期部分
  • 使用 Compojure、Hiccup 和 Ring 上传文件

    要将文件上传到我用 Clojure 编写的服务器 我需要一个如下所示的客户端表单
  • 什么是 fn* 以及 Clojure 如何引导?

    The Clojure core 的来源 https github com clojure clojure blob master src clj clojure core clj似乎假设预先存在fn 这是在哪里定义的 引导程序还需要什么
  • 在 clojure 中,使用递归实现宏时如何进行代码模板化

    我正在尝试实现一个宏 以递归地将中缀列表转换为前缀列表 我遇到一个问题如下 this works defmacro recursive infix form list second form first form if not seq nt
  • Clojure def 与 defn 对于没有参数的函数

    我用 clojure 编写了一个程序 但有些函数没有参数 将此类函数编码为 def 而不是不带参数的 defn 有什么优点 def t0 System currentTimeMillis defn t1 System currentTime
  • 设置、让、宏、坚果

    我正在尝试从 html 内容构建一个快速目录 为了简短起见 代码非常简单 defn toc content doseq i take 5 iterate inc 1 let h str h i println content h where
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • 将数据库表转换为 XML 模式文件

    我正在使用 SQL Server 2005 是否有任何命令或 GUI 工具 例如 SQL Server Management Studio 中的任何菜单 功能 可以将数据库表转换为 XML 架构文件 xsd 提前致谢 乔治 我找到了这个 试
  • 如何使用clojure中的map函数打印哈希映射列表的每个元素?

    我正在构建一个哈希映射列表 然后将其传递给另一个函数 当我尝试使用打印列表中的每个哈希映射时map它不工作 我可以打印完整列表或获取第一个元素等 defn m a println a map println a 以下仅适用于 repl m
  • Oracle:如何查找模式中上次更新(任何表)的时间戳?

    有一个Oracle数据库模式 数据很小 但仍然有10 15个表左右 它包含一种配置 路由表 有一个应用程序必须不时轮询此架构 不得使用通知 如果架构中没有数据更新 应用程序应使用其当前的内存版本 如果任何表有任何更新 应用程序应将所有表重新
  • 为什么 clojure-mode 用一些卷曲的 f 字符替换 fn ?

    我刚刚开始使用 emacs 入门套件和 clojure 模式 现在 当我输入或粘贴 fn 在 Clojure 模式下进入缓冲区 fn 字符在窗口中被替换为稍微卷曲的小写字母 f 缓冲区已正确保存 但这非常烦人 尤其是当我以艰难的方式发现该功
  • 为什么这个 Clojure 程序在可变数组上运行如此慢?

    剧透警告 这是 代码降临 第六天的第一部分 我试图解决this http adventofcode com day 6Clojure 和 Scala 中的问题 Scala 程序在我的 Macbook Air 上运行良好 几秒钟内就完成了 然
  • 如何解构向量以用作函数参数

    在 Python 中 您可以将列表或元组传递给函数并让函数解压参数 我怎样才能在 Clojure 中做到这一点 下面是一些 Python 代码示例 def f a b c d print a a print b b print c c pr
  • Log4Net“找不到架构信息”消息

    我决定使用log4net http logging apache org log4net index html作为新 Web 服务项目的记录器 一切工作正常 但对于我在我的应用程序中使用的每个 log4net 标签 我都会收到很多类似下面的
  • Clojure 的分析工具?

    有谁知道 Clojure 有一个好的分析工具或库吗 我更喜欢可以从 REPL 中使用的东西 类似于 with profiling 过去是在 Allegro Common Lisp 中 有什么类似的事情吗 或者您是否有过与 Clojure 配
  • 用于验证一个参数的多种类型和值的 json 架构

    请在这件事上给予我帮助 我尝试编写一个 json 模式来验证以下对象 json 对象 param value 可能的值 all 任意整数的数组 所以它是一个简单的 json 对象 其中包含一个变量 可以是字符串 all 也可以是任何整数数组
  • 如何在 Clojure 中创建循环(且不可变)数据结构而不需要额外的间接?

    我需要在 Clojure 中表示有向图 我想将图中的每个节点表示为一个对象 可能是一条记录 其中包含一个名为 edges这是从当前节点直接可达的节点的集合 希望这是不言而喻的 但我希望这些图表是不可变的 我可以构造有向acyclic只要我进
  • 调用 Clojure 高阶函数

    如果我定义一个返回如下函数的函数 defn add n n fn x x n 然后我可以将结果分配给一个符号 def add 1 add n 1 并称其为 add 1 41 gt 42 我如何调用结果 add n 1 而不将其分配给新符号
  • 为什么 CouchDB 使用仅追加 B+ 树而不是 HAMT

    我正在阅读数据结构 尤其是不可变的数据结构 例如仅追加 B 树 http guide couchdb org draft btree html用于 CouchDB 和哈希数组映射 trie http en wikipedia org wik

随机推荐

  • 从命令行关闭 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