You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dafny是否支持元组解构语法?能否在function内使用解构?

Dafny 元组解构语法支持情况

方法(method)场景的解构

你给出的示例写法存在小问题,Dafny原生支持元组解构,但不支持提前单独声明变量后再做元组批量赋值,正确写法是将变量声明和解构绑定同时完成:

function method f(x:int) : (int,int) { (x,x+1) }

method test() {
    // 直接在解构时声明变量,可正常通过验证
    var (y, z) := f(1);
    assert y == 1 && z == 2;
}

如果只需要元组中的部分返回值,可以用下划线_作为通配符忽略不需要的字段,比如var (y, _) := f(1);就只会绑定第一个返回值到y。

function 内部的解构支持

function(包含function method)内部同样支持元组解构,由于function是表达式上下文,需要通过var/let绑定完成解构,不能使用语句式赋值,示例如下:

function g(x: int): int {
    // function内部直接通过var绑定解构元组
    var (a, b) := f(x);
    a * b
}

// 可通过验证:g(2) = 2 * 3 = 6
lemma VerifyG() {
    assert g(2) == 6;
}

注意事项

  • 所有解构场景都要求变量声明与解构动作同步完成,暂不支持给已提前声明的变量做元组批量赋值。
  • 该语法对任意长度的元组都生效,不局限于二元元组。

内容的提问来源于stack exchange,提问作者redjamjar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:01:06