Я думаю, что самым простым способом было бы определить спецификацию args отдельно, чтобы вы могли использовать ее в fspec
и легко получить позже для отдельного поколения.
(defn foo [x] (inc x))
(s/def ::foo-args (s/cat :x number?))
(s/fdef foo :args ::foo-args)
(gen/sample (s/gen ::foo-args))
=> ((2.0) (-1.5) (0) (1) (1.0) (-1) (1.5) (0.5) (-5.0) (-7))
Если у вас нетпрямой доступ к оригинальной спецификации :args
, вот неуклюжий способ воссоздать ее из fspec
:
(s/fdef foo :args (s/cat :x number?))
(def foo-args-spec
(eval (->> (s/get-spec `foo)
(s/form) ;; get original fspec form
(rest) ;; discard fspec symbol
(apply hash-map) ;; put fspec kwargs into map
(:args))))
(gen/sample (s/gen foo-args-spec))
=> ((0.5) (-3.0) (-1.5) (2) (-1) (-5) (-1.75) (-2) (-13) (2.3828125))