gpt4 book ai didi

validation - clojure 的 Schema 中至少存在一个可选键

转载 作者:行者123 更新时间:2023-12-04 00:50:13 26 4
gpt4 key购买 nike

假设我有以下架构用于我从外部世界收到的一些输入:

(def my-schema
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool})

有了上述内容,我正在验证的 map 中可以存在或缺少所有键或不存在键,这是有道理的。但是,如果我想确保其中至少有一个存在怎么办?

我当然可以在 Schema 验证上述内容后执行额外的单独检查,并确保键计数 >= 1,但我很好奇是否有一种方法可以在 Schema 定义本身中强制执行。

想法?

最佳答案

你可以在你的模式中指定任何你想要的谓词:

(def my-schema
(s/both
(s/pred (complement empty) 'not-empty)
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool}))

如果您询问如何仅使用内置谓词验证 map ,您可以编写:
(def my-schema
(s/both
{(s/optional-key :foo) Bool
(s/optional-key :baz) Bool
(s/optional-key :bar) Bool}
(s/either
{:foo Bool s/Any s/Any}
{:baz Bool s/Any s/Any}
{:bar Bool s/Any s/Any})))

pred 相比,它非常丑陋且冗长得多。例子

关于validation - clojure 的 Schema 中至少存在一个可选键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25344838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com