gpt4 book ai didi

Clojure 规范 - 覆盖谓词的检查生成器

转载 作者:行者123 更新时间:2023-12-05 07:24:24 25 4
gpt4 key购买 nike

有没有办法在调用 clojure.spec.test.alpha/check 时覆盖核心谓词函数的生成器?

可以通过 s/gen 中的路径覆盖谓词生成器:

(gen/generate
(s/gen
(s/cat :s string?)
{[:s] #(gen/return "xyz")}))

但是 test/check 不存在该选项:

(defn xyz [s] s)

(s/fdef xyz
:args (s/cat :s string?)
:ret string?)

;; throws
(test/check
`xyz
{:gen {[:args :s] #(gen/return "xyz")}})

必须提供名称或符号,但是 string? 规范的名称是什么?我试过使用符号,都是'字符串?和`字符串?但它也没有用。

通过在 s/fdef 中使用 s/with-gen 包装 string? 来覆盖生成器,导致生成器代码显示在函数的文档中...影响可读性 imo。

仅仅为此目的定义新规范 ::string 感觉不对。

最佳答案

(ns so.spec
(:require [clojure.spec.gen.alpha :as gen]
[clojure.spec.alpha :as s]
[clojure.spec.test.alpha :as st]))

(defn xyz [s]
; only to make sure it gets called
(prn s)
s)

(s/def ::xyz-arguments (s/cat :s string?))

(s/fdef xyz
:args ::xyz-arguments
:ret string?)

(st/check
'so.spec/xyz
{:gen {::xyz-arguments #(gen/return '("xyz"))}})

关于Clojure 规范 - 覆盖谓词的检查生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436961/

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