1

我正在使用一个看起来像这样的规范:

(ns blah
  (:require [clojure.spec.alpha :as s]
            [clojure.spec.gen.alpha :as gen]))
(s/def ::user
  (s/with-gen
    (s/and string? #(re-matches #"^[a-zA-Z]{3,20}$" %))
    #(gen/string-alphanumeric)))

它在生成示例时工作正常,尽管经常达到 100 次尝试的限制。我真的想要一个gen/string-alpha,虽然这个生成器不可用。

当我尝试做到这一点时:

#(gen/fmap clojure.string/join (gen/vector gen/char-alpha 3 20))

...它说“向量的第一个参数必须是生成器”。

为什么gen/char-alpha指向 clojure.test.check.generators)不起作用?

4

1 回答 1

2

Oopsie 需要阅读文档:

clojure.spec.gen.alpha/char-alpha
([& args])
  Fn returning clojure.test.check.generators/char-alpha

正确的形式是:

#(gen/fmap clojure.string/join (gen/vector (gen/char-alpha) 3 20))
于 2018-08-12T07:40:27.663 回答