您可以将命名参数与简写构造函数参数结合起来吗?

Posted

技术标签:

【中文标题】您可以将命名参数与简写构造函数参数结合起来吗?【英文标题】:Can you combine named parameter with short-hand constructor parameter? 【发布时间】:2014-03-10 08:51:22 【问题描述】:

在飞镖中:

命名参数函数像这样-

String send(msg, rate: 'First Class') 
  return '$msg was sent via $rate';


// you can use named parameters if the argument is optional
send("I'm poor", rate:'4th class'); // == "I'm poor was sent via 4th class"

简写的构造函数参数函数是这样的-

class Person 
  String name;

  // parameters prefixed by 'this.' will assign to
  // instance variables automatically
  Person(this.name);

有什么办法可以做类似下面的事情吗?-

class Person
   String name;
   String age;

   Person(this.name = "defaultName", this.age = "defaultAge");


//So that I could do something like:
var personAlpha = new Person(name: "Jordan");

谢谢,

从dartlang synonyms借来的代码示例

【问题讨论】:

【参考方案1】:

更新

是的,= 在 Dart 2 中是允许的,现在比 : 更可取,以匹配可选的位置参数。

Person(this.name = "defaultName", this.age = "defaultAge");

旧答案

你只需要使用冒号而不是等号

class Person 
   String name;
   String age;

   Person(this.name: "defaultName", this.age: "defaultAge");

我发现这仍然令人困惑,可选参数使用= 分配默认值,但命名使用:。 应该问问自己。

【讨论】:

这个语法的论据是它“看起来像” Map 文字语法。 现在= 显然被允许(首选?)代替冒号。 @Suragch 谢谢!是的 = 是为 Dart 2 添加的,现在它比 : 更适合匹配可选的位置参数。【参考方案2】:

您可以使用“这个”。具有所有参数类型的语法。 如上所述,您需要 ':' 作为命名参数的默认值。

你甚至可以使用“这个”。对于函数类型参数:

class C 
  Function bar;
  C(int this.bar(int x) : foo);

  static foo(int x) => x + 1;

【讨论】:

这也太棒了。谢谢伊恩!酒吧怎么可能是可选的呢? bar 和 foo 都有 x 的必需参数;所以,如果你只是不包含 bar 作为参数,那么 foo 怎么知道 x 是什么? 在这种情况下,“bar”只是一个标准的可选参数,它需要一个值。该值必须具有函数类型(int->int),但在其他方面与编写C(String this.bar: 'bif') 没有区别。如果参数被省略,它将使用默认值,否则它将使用传递的任何参数。您可以将其称为new C(bar:null)new C(bar: (z) => -z)【参考方案3】:

您还可以添加必填字段以跳过默认初始化,如下所示:

class ProcessArguments 
  final String logoImagePath;
  final String textLogoImagePath;

  ProcessArguments(required this.logoImagePath, required this.textLogoImagePath);

【讨论】:

以上是关于您可以将命名参数与简写构造函数参数结合起来吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 GDB 查看未命名的框架/函数参数?

为啥不能在 Ruby 3 中结合 `...` 和命名参数?

打字稿:通过传入命名参数的构造函数创建类?

通过函数传递未命名的类

面向对象的 Perl 构造函数语法和命名参数

将结果写入 bigquery 中的永久表