现在在 Dart 中有两种使用 typedef 的方法吗?

2023-12-22

我看到多种形式typedef整个 dart 和 flutter 库,但我不太明白它的意义。 Framework.dart中有这个例子:

typedef ElementVisitor = void Function(Element element);

还有这个例子(https://medium.com/@castellano.mariano/typedef-in-dart-40e96d3941f9 https://medium.com/@castellano.mariano/typedef-in-dart-40e96d3941f9):

typedef String Join(String a, String b);

我不太明白它们的用途的区别。也许这与为什么我在 Dart 或 Flutter 库中找不到“函数”的定义有关。但话又说回来,我可以在 Framework.dart 文件中找到其他 typedef 也很好。


正如文档所指

有一种旧的和新的方式typedef

总的来说:新方法更清晰、更具可读性。

详细信息:

typedef G = List<int> Function(int); // New form.
typedef List<int> H(int i); // Old form.

请注意,旧形式中需要参数名称,但类型可以省略。相反,新形式中需要类型,但名称可以省略。

使用两种方式来表达同一事物的原因是,新形式无缝地涵盖了非泛型函数和泛型函数,并且开发人员可能更喜欢在任何地方使用新形式,以提高可读性。

声明泛型函数类型和声明采用类型参数的 typedef 之间存在差异。前者是单个类型的声明,它描述了特定类的运行时实体:能够在运行时接受某些类型参数和某些值参数的函数。后者是从类型到类型的编译时映射:它在编译时接受类型参数并返回一个类型,该类型可以用作类型注释。我们使用短语参数化 typedef 来指代后者。 Dart 对参数化 typedef 的支持已经有一段时间了,新语法也支持参数化 typedef。下面是参数化 typedef 的示例及其用法:

typedef I<T> = List<T> Function(T); // New form.
typedef List<T> J<T>(T t); // Old form.
I<int> myFunction(J<int> f) => f;

了解更多info https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generic-function-type-alias.md

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

现在在 Dart 中有两种使用 typedef 的方法吗? 的相关文章

随机推荐