为什么dart类构造函数不能有主体?

为什么dart类构造函数不能有主体?,dart,constructor,Dart,Constructor,我是dart新手,遇到如下代码: class-Foo{ Foo._internal(); 静态最终Foo实例=Foo._internal(); //其他东西 } 我被函数\u internal调用了两次(分别在第2行和第3行)弄糊涂了。 后来我意识到第一个函数实际上不是调用,而是构造函数的定义。 只是省略了定义的主体(允许使用Dart IMHO的语法规则是非常糟糕的) 所以我的问题是,在什么情况下,dart的函数可以省略body?dart为构造函数提供了大量的语法糖分,包括使用分号代替空构造函

我是dart新手,遇到如下代码:

class-Foo{
Foo._internal();
静态最终Foo实例=Foo._internal();
//其他东西
}
我被函数
\u internal
调用了两次(分别在第2行和第3行)弄糊涂了。 后来我意识到第一个函数实际上不是调用,而是构造函数的定义。 只是省略了定义的主体(允许使用Dart IMHO的语法规则是非常糟糕的)


所以我的问题是,在什么情况下,dart的函数可以省略body?

dart为构造函数提供了大量的语法糖分,包括使用分号代替空构造函数body的能力。由于在可能的情况下,应该首选初始化列表,所以构造函数有空的主体并不少见,所以简写法很有用。此外,他们根本不允许有尸体

构造函数不是函数,因此速记一般不适用于函数和方法。(作为构造函数和函数之间区别的其他示例,构造函数不能直接用作回调(Dart称之为“撕裂”),只有构造函数可以与
new
const
一起使用)对于方法,区分无正文和空正文很重要:

抽象类抽象接口{
void必须被覆盖();
void optionallyOverrided(){}
}
我同意像
Foo.\u internal()这样的构造函数
看起来很奇怪,但我认为这不是一种常见的情况,因为它需要多个案例的交叉,才能使它看起来像一个方法调用:

  • 该类使用命名构造函数
  • 该构造函数不接受任何参数
  • 该构造函数不使用初始值设定项列表
  • 该构造函数不使用构造函数体