如何在球拍中的合同外条款中指定可选参数?

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 中有介绍。