如何在球拍中的合同外条款中指定可选参数?
How to specify optional argument within contract-out clause in Racket?
鉴于我有一些带有如下签名的函数
(define (my-method a [b 100])
(/ a b)
)
,我应该如何在 contract-out
中指定这样的签名?
使用
(contract-out
[my-method (-> number? number? number?)])
然后在另一个模块中
(my-method 200)
没有帮助,因为它发出错误 "contract violation, received: 1 arguments, expected: 2 non-keyword arguments"。而且我想我不能只使用 or/c
.
结合两个合同,有和没有可选
使用 ->*
并首先列出强制参数(在一组中),然后是可选参数(在第二组中),最后是结果。还有更多高级选项;请参阅文档。
(contract-out
[my-method
(->* [number?] ;; 1 mandatory argument
[number?] ;; 1 optional argument
number?)])
这在 Contracts chapter of Racket Guide, on the section named Optional Arguments 中有介绍。
鉴于我有一些带有如下签名的函数
(define (my-method a [b 100])
(/ a b)
)
,我应该如何在 contract-out
中指定这样的签名?
使用
(contract-out
[my-method (-> number? number? number?)])
然后在另一个模块中
(my-method 200)
没有帮助,因为它发出错误 "contract violation, received: 1 arguments, expected: 2 non-keyword arguments"。而且我想我不能只使用 or/c
.
使用 ->*
并首先列出强制参数(在一组中),然后是可选参数(在第二组中),最后是结果。还有更多高级选项;请参阅文档。
(contract-out
[my-method
(->* [number?] ;; 1 mandatory argument
[number?] ;; 1 optional argument
number?)])
这在 Contracts chapter of Racket Guide, on the section named Optional Arguments 中有介绍。