Не уверен, как написать спецификацию для проверки деструктурированных аргументов функции.
Если у меня есть эта простая функция:
(defn make-name [[first last]]
(str first " " last))
И я пишу эту спецификацию для аргумента:
(s/def ::vstring2 (s/coll-of string? :kind vector? :count 2 :distinct false))
Он работает правильно:
(s/conform ::vstring2 ["Rich" "Hickey"])
=> ["Rich" "Hickey"]
Но когда я пытаюсь применить его к функции, вот так:
(s/fdef make-name
:args ::vstring2
:ret string?)
Она взрывается:
(stest/check `make-name)
=>
({:spec #object[clojure.spec.alpha$fspec_impl$reify__2451
0x7dd4c5ac
"clojure.spec.alpha$fspec_impl$reify__2451@7dd4c5ac"],
:clojure.spec.test.check/ret {:result #error{:cause "Wrong number of args (2) passed to: roster/make-name",
(...)
Как написать функцию Spec, используя ::vstring2
?Или я?
Спасибо.