You need to enable JavaScript to run this app. 函数定义中在命名参数后追加参数为何会触发报错?
优惠活动
大模型
产品
解决方案
定价
更多

函数定义中在命名参数后追加参数为何会触发报错?

Dart 函数命名参数的位置语法规则

报错核心原因

这是Dart语言对函数参数顺序的强制语法约束导致的,并非业务逻辑或运行时问题。
Dart的函数参数分为两大类别,语法明确要求:

  • 所有用{}包裹的命名参数,必须放置在整个函数参数列表的最末尾位置,不允许穿插在普通的位置参数中间。
  • 普通的必选位置参数、用[]包裹的可选位置参数,必须全部排在命名参数的前面。

两段代码的对比分析

  1. 触发报错的namesV0函数
    void namesV0(String name1 , {String  name2 ='NotFound'}, String name3 , int edad) {}
    
    问题点:带默认值的命名参数{String name2 ='NotFound'}被放在了位置参数name1和后面的name3、edad之间,直接违反了命名参数必须放在参数列表末尾的语法要求,因此在代码解析阶段就会抛出语法错误。
  2. 可正常运行的namesV1函数
    void namesV1(String name1 , String name3, int edad, {String  name2 ='NotFound'}) {}
    
    合规点:所有必选位置参数name1、name3、edad全部排列在参数列表前段,命名参数{String name2 ='NotFound'}放在了整个参数列表的最末尾位置,完全符合语法规范,因此可以正常运行。

补充说明

  • 命名参数是否设置默认值,不影响位置规则的校验,哪怕带默认值的命名参数放错位置,同样会触发报错。
  • 如果有在参数列表中间插入可选参数的需求,应该使用[]包裹的可选位置参数实现,不能使用{}定义的命名参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 21:27:04