You need to enable JavaScript to run this app. Dart函数中用[]包裹参数的含义是什么?和{}包裹参数有什么区别?
优惠活动
大模型
产品
解决方案
定价
更多

Dart函数中用[]包裹参数的含义是什么?和{}包裹参数有什么区别?

Dart 中[]与{}包裹参数的区别

你遇到的[]包裹的参数是Dart的位置可选参数,你之前常见的{}包裹的是命名可选参数,二者都属于Dart的可选参数类型,核心差异如下:

  • 位置可选参数([]包裹)
    传参时不需要指定参数名,必须按照参数定义的顺序传递。如果没有为该类参数设置默认值,必须将其声明为可空类型(即后缀带?,和你示例中的List<String>?写法一致)。
    你给出的示例函数调用方式如下:
    // 不传arguments参数
    makeCommand('flutter');
    // 按参数定义顺序传入arguments,不需要写参数名
    makeCommand('flutter', ['run', '--debug']);
    
  • 命名可选参数({}包裹)
    传参时必须指定参数名,不需要严格遵循参数定义的顺序。如果没有为该类参数设置默认值,同样需要声明为可空类型,也可以用required修饰标记为必填参数。
    如果你的示例函数改为命名可选参数写法:
    String makeCommand(String executable, {List<String>? arguments}) {
      var result = executable;
      if (arguments == null) return result;
      return result + ' ' + arguments.join(' ');
    }
    
    对应的调用方式为:
    // 不传arguments参数
    makeCommand('flutter');
    // 传参需要指定参数名
    makeCommand('flutter', arguments: ['run', '--debug']);
    

额外注意:如果函数同时定义两类可选参数,位置可选参数必须放在命名可选参数之前声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 03:06:04