问题标签 [plumatic-schema]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
202 浏览

clojure - Clojure 1.4 上的棱柱模式?

我们正在评估Prismatic/schema以用于当前使用 Clojure 1.4 的项目。我们现在不希望在我们的项目中升级 Clojure。Schema 需要 Clojure 1.5.1,但是 repl 中的一些基本测试没有显示将 Clojure 版本更改为 1.4 有任何问题。

有没有其他人尝试过在 Clojure 1.4 上使用模式,它的效果如何?

这是我尝试过的(在 project.clj 中将 Clojure 更改为 1.4.0 之后):

没问题。我注意到的一件事是模式测试在 Clojure 1.4 上完全呕吐(甚至不会运行)。我并不真正关心这一点,但我会关心项目功能是否存在实际问题。

0 投票
1 回答
1392 浏览

clojure - 使用 Prismatic Sc​​hema 验证多个多态值

不久前,我询问了关于简单多态模式的问题,那里的答案有一段时间效果很好。

现在我要验证的地图有一个附加值,它取决于另一个键的值。

一个人为的对象示例:

这里的鉴别器是:typeand :method,每个鉴别器都有自己的一组有效的兄弟键和值。

以前只:type存在,并且以下工作:

然而,现在有不止一个鉴别器,条件分支的数量将是组合的。

一种选择是允许{s/Any s/Any}在地图中使用s/both,但我不能允许模式“松散”,因为意外的键/值应该被视为无效。

我也不想更改正在验证的地图的结构,只是为了允许使用这个库进行验证。

有没有一种健全的方法来实现对具有多个条件子模式的映射的严格验证?

0 投票
1 回答
1131 浏览

clojure - 在 Clojure 中使用 Prismatic/schema 进行函数验证

我有一个关于使用Prismatic/schema验证函数的非常简单的问题。我有一个具有单个键的映射模式,其值是一个函数,该函数将Bar模式作为其单个参数并返回任何内容(用于副作用):

问题是,我该如何定义Action?我试过这个:

这看起来很有希望,但我不能让它验证失败:

我在这里做错了什么?

我阅读了core_test中的文档和测试,但我不知道该怎么做。

0 投票
1 回答
426 浏览

clojure - 在 Prismatic/Schema 中打开/关闭验证的全局标志?

在开发过程中,我想为使用 schema.core/defn 定义的所有函数启用验证,而不必使用:^:always-validate. 这个库有可能吗?

像这样的东西不起作用,可能是因为元数据只在编译时添加:

0 投票
3 回答
1653 浏览

validation - 使用 Prismatic/schema 通过 Liberator 进行表单验证

棱柱形/模式是否适合表单验证?我以前从未设计过表单验证库,但我想它会输出类似这样的东西,而不是抛出异常s/validate

我希望有人将它与 Compojure 和 Liberator 一起使用,但我在网上找不到任何东西。

0 投票
1 回答
1414 浏览

clojure - 是否可以在 Clojure 函数前提条件中使用 Prismatic schema.core/maybe?

我正在尝试在使用可选参数的函数的前提条件中使用Prismaticschema.core/maybe ,但是当我调用函数时opts它似乎总是抛出一个no :AssertionErroropts

有趣的是,这按预期工作:

我在macroexpand上用过defn,但那里没有什么不寻常的地方。

我当然可以用一个先决条件来解决这个问题

0 投票
1 回答
263 浏览

clojure - 使用实例时出现 ClassNotFoundException?Clojure 中的 defrecord 类型

我编写了一个函数,它只选择在特定模式中命名的映射键:

这在我的单元测试中工作得很好:

但是,当我foo.schema/select-schema在一个完全独立的项目中使用(即lein install在我的 foo 项目中构建一个 jar 并将其粘贴到我的~/.m2/repository并将其命名为依赖项)时,我得到一个ClassNotFoundException

我查看了 Prismatic Sc​​hema 源代码,发现它OptionalKey是一个 defrecord 类型。一点谷歌搜索显示 defrecord 生成一个 Java 类,有时需要在需要定义它的命名空间后导入该类,但尝试在包含的项目中执行此foo.schema操作没有任何区别:它在单元测试中工作,但是在foo用作依赖项的其他项目中不起作用。

0 投票
1 回答
324 浏览

clojure - 将 clojure.core/Extend 与 Prismatic 模式一起使用,我在 s/validate 和 s/with-fn-validation 中得到了 s/protocol 的不同行为

我正在尝试验证我使用 clojure.core/extend 动态生成的 defrecord 实例的协议

下面你可以看到 satisfies 返回 true 并且 (s/validate (s/protocol ...)) 不会引发异常,但是如果我运行 s/with-fn-validation 我会得到一个 "(not (satisfies?protocol 。 ...." 模式异常,尽管在这个体内我一直得到相同的真实结果(满足?协议 x)

这里还有一个代码要点

0 投票
1 回答
375 浏览

clojure - 如何检查 Prismatic Sc​​hema 强制期间引发的 ValidationError?

作为创建 Schema 强制器然后尝试强制一组数据的结果,我得到:

我如何解释实际的验证错误是什么?

0 投票
0 回答
78 浏览

clojure - 如何为交错类型定义棱柱模式?

假设我有以下序列:

例如 [(one Symbol) (one Symbol) (one Int) (one Str) ... ]

我应该插入什么来代替......以获得可变长度交错整数和字符串的有效模式?