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
相关产品推荐
相关产品推荐

