gpt4 book ai didi

Clojure 规范和解构?

转载 作者:行者123 更新时间:2023-12-02 18:34:53 26 4
gpt4 key购买 nike

不确定如何编写规范来检查函数的解构参数。

如果我有这个简单的功能:

(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",

(...)

如何使用 ::vstring2 编写函数 Spec?还是我呢?

谢谢。

最佳答案

您只需要为函数的参数指定另一个规范,例如使用s/cat:

(s/fdef make-name
:args (s/cat :arg1 ::vstring2)
:ret string?)

在您的示例中, :args 规范需要两个参数,因为您的 ::vstring2 规范是一个需要两个字符串的集合。通过此更改,函数 :args 规范知道它只需要 一个 参数,该参数应符合 ::vstring2

还有更多函数规范示例herehere .

关于Clojure 规范和解构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50747345/

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