如何在Racket的contract out子句中指定可选参数?
假设我有一个签名如下的函数如何在Racket的contract out子句中指定可选参数?,racket,optional,contract,Racket,Optional,Contract,假设我有一个签名如下的函数 (define (my-method a [b 100]) (/ a b) ) ,我应该如何在合同中指定此类签名 使用 (contract-out [my-method (-> number? number? number?)]) 然后在另一个模块中 (my-method 200) 没有帮助,因为它会发出错误,说“违反合同,收到:1个参数,预期:2个非关键字参数”。我想我不能只使用或/c使用->*组合两个有可选参数和没有可选参
(define (my-method a [b 100])
(/ a b)
)
,我应该如何在合同中指定此类签名
使用
(contract-out
[my-method (-> number? number? number?)])
然后在另一个模块中
(my-method 200)
没有帮助,因为它会发出错误,说“违反合同,收到:1个参数,预期:2个非关键字参数”。我想我不能只使用或/c
使用->*
组合两个有可选参数和没有可选参数的合同,并首先列出强制参数(在一个组中),然后列出可选参数(在第二个组中),然后列出结果。还有更高级的选择;见文件
(contract-out
[my-method
(->* [number?] ;; 1 mandatory argument
[number?] ;; 1 optional argument
number?)])
这在《球拍指南》的一章中,在名为的章节中有介绍。使用->*
并首先列出强制参数(在一组中),然后列出可选参数(在第二组中),然后列出结果。还有更高级的选择;见文件
(contract-out
[my-method
(->* [number?] ;; 1 mandatory argument
[number?] ;; 1 optional argument
number?)])
这在《球拍指南》中的一章中有介绍,该章节名为