已按文档配置{:autocontracts}但Dafny未生成自动合约,该如何处理?
解决Dafny自动生成autocontracts无反应的问题
确认Dafny版本兼容性
autocontracts是Dafny 3.10及以后版本才支持的功能,先在终端执行dafny --version查看当前版本,低于3.10的话需要升级到最新稳定版。规范代码结构
必须保证代码符合要求的格式:- 类的
{:autocontracts}标记要放在类定义的上方,不能嵌套在类内部 - Valid谓词必须声明为
predicate Valid(),且如果类包含字段,必须加上reads this子句,示例代码如下:{:autocontracts} class BankAccount { var balance: int predicate Valid() reads this { balance >= 0 } }
- 类的
主动触发生成操作
VSCode中没有默认的按钮,需要手动触发命令:- 打开命令面板(快捷键Ctrl+Shift+P或Cmd+Shift+P)
- 输入并执行
Dafny: Generate Auto-Contracts命令
也可以用终端命令行直接处理文件:dafny generate-autocontracts your-dafny-file.dfy,生成的合约代码会保存为your-dafny-file_autocontracts.dfy
同步更新VSCode插件
确保VSCode里的Dafny插件是最新版,插件版本需要和本地Dafny版本匹配,否则可能找不到生成命令。
内容的提问来源于stack exchange,提问作者Type Definition
相关产品推荐
相关产品推荐

