作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不确定如何编写规范来检查函数的解构参数。
如果我有这个简单的功能:
(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
。
关于Clojure 规范和解构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50747345/
为什么 pickle 重用现有的 Python 类“C”而不是从 pickle 字节重建类?有没有一种方法可以在没有副作用的情况下 pickle 和解 pickle ? 这是我的回复 session
我是一名优秀的程序员,十分优秀!