我是 dart 新手,遇到了如下代码:
class Foo {
Foo._internal();
static final Foo instance = Foo._internal();
// other stuff
}
我对函数 _internal
被调用两次(分别在第 2 行和第 3 行)感到困惑。
后来我意识到第一个实际上不是构造函数的调用而是定义。
只是定义的主体被省略了(恕我直言,这是一个非常糟糕的 Dart 语法规则)。
所以我的问题是,在什么情况下 dart 函数可以省略 body?
最佳答案
Dart 为构造函数提供了大量语法糖,包括使用分号代替空构造函数主体的能力。由于应尽可能首选初始化列表,因此构造函数具有空主体的情况并不少见,因此简写很有用。此外,redirecting constructors和 const
constructors根本不允许有 body 。
构造函数不是函数,因此简写不适用于一般的函数和方法。 (作为构造函数和函数之间区别的另一个示例,只有构造函数可以与 new
和 const
一起使用。)对于方法,区分无主体和空主体很重要:
abstract class AbstractInterface {
void mustBeOverridden();
void optionallyOverridden() {}
}
我同意像 Foo._internal();
这样的构造函数看起来很奇怪,但我认为这不是常见情况,因为它需要多个案例的交集才能使其看起来像一个方法调用:
- 该类使用命名构造函数。
- 该构造函数不带参数。
- 该构造函数不使用初始值设定项列表。
- 该构造函数不使用构造函数主体。
关于dart - 为什么 dart 类构造函数可以没有主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67327831/