racket - 如何在 Racket 的合同退出条款中指定可选参数?
问题描述
鉴于我有一些带有签名的功能,如下所示
(define (my-method a [b 100])
(/ a b)
)
,我应该如何指定这样的签名contract-out
?
使用
(contract-out
[my-method (-> number? number? number?)])
然后在另一个模块中
(my-method 200)
没有帮助,因为它发出错误说“违反合同,收到:1 个参数,预期:2 个非关键字参数”。而且我想我不能只将两个合同与可选的 using 结合起来or/c
。
解决方案
首先使用->*
并列出强制参数(在一个组中),然后是可选参数(在第二组中),然后是结果。还有更高级的选项;请参阅文档。
(contract-out
[my-method
(->* [number?] ;; 1 mandatory argument
[number?] ;; 1 optional argument
number?)])
这在 Racket Guide 的Contracts章节中进行了介绍,在名为Optional Arguments的部分中。
推荐阅读
- asp.net-core - IActionResult 无法从用法中推断方法的类型参数
- android - 如何解决此问题“NoSuchFieldError: No static field INSTANCE of type...”?
- meshlab - 导入 Fusion 360 .stl 文件时,Sketchup 冻结
- amazon-web-services - AWS 第 7 层防火墙阻止 http 洪水
- javascript - GatsbyJS 中的 Markdown 文件在转换时未按预期转换为 HTML
- python - 如果关键字不失败,则重复执行关键字固定时间而不失败
- azure - 从 Azure Functions 连接到 tcp 套接字时出错
- c# - 警告 MSB3290:包装器组件失败
- python - SystemError:未加载父模块“setuptools”,无法执行相对导入
- python - charm.pool.map & tqdm:获取进度条