如何在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?)])
这在《球拍指南》中的一章中有介绍,该章节名为