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

Dart列表模式匹配中如何捕获rest剩余元素?

Dart列表模式匹配中如何捕获rest剩余元素?

嘿,这个问题我之前也踩过坑!Dart里在switch的case模式中捕获剩余元素确实有特定的语法要求,你之前的写法差了一点点顺序~

你原来写的var ...rest不符合Dart模式匹配的语法规则,正确的写法应该把...放在变量声明的前面,也就是**...var rest**,这样编译器才能识别你要把剩余的列表元素捕获到rest变量里。

给你修正后的完整代码:

var list = [1, 2, 3, 4];

switch (list) {
  case [var a, var b, ...var rest]:
    // 这里可以正常使用a、b和rest了
    print("a: $a, b: $b, rest: $rest"); // 输出:a: 1, b: 2, rest: [3, 4]
    break;
  default:
    print("列表不符合预期结构");
}

关于你提到的赋值场景里的写法var [a, b, ...rest] = list能正常工作,是因为赋值模式的语法允许直接用...rest来捕获剩余元素;而switch case的模式匹配属于模式绑定场景,需要明确用...var 变量名的形式来声明要捕获的剩余变量,这是Dart模式匹配语法里的细微区别。

另外补充一点:如果只是想匹配“至少有两个元素”的结构,不需要捕获剩余元素,那你原来写的case [_, _, ...]:是完全没问题的,只有当需要把剩余元素存到变量里时,才需要加上var并调整顺序。

备注:内容来源于stack exchange,提问作者Dimitris Andreou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:17:57