首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Dart中函数类型/函数类型别名是什么?

问在Dart中函数类型/函数类型别名是什么?
EN

Stack Overflow用户
提问于 2012-09-22 16:45:00
回答 7查看 50.4K关注 0票数 95

我读过描述,我知道它是一个函数类型的别名.

  • 类型类型别名,即函数类型别名,为函数类型提供了一个可以在声明字段和返回类型时使用的名称。当将函数类型赋值给变量时,type保留类型信息。

但我该怎么用呢?为什么要用函数类型声明字段?我什么时候用?它解决了什么问题?

我想我需要一两个真正的代码示例。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-09-22 17:21:13

在Dart中,typedef的一个常见使用模式是定义回调接口。例如:

代码语言:javascript
复制
typedef void LoggerOutputFunction(String msg);

class Logger {
  LoggerOutputFunction out;
  Logger() {
    out = print;
  }
  void log(String msg) {
    out(msg);
  }
}

void timestampLoggerOutputFunction(String msg) {
  String timeStamp = new Date.now().toString();
  print('${timeStamp}: $msg');
}

void main() {
  Logger l = new Logger();
  l.log('Hello World');
  l.out = timestampLoggerOutputFunction;
  l.log('Hello World');
}

运行上述示例将产生以下输出:

Hello World 2012-09-22 10:19:15.139:你好世界

typedef行表示LoggerOutputFunction接受一个字符串参数并返回void。

timestampLoggerOutputFunction与该定义匹配,因此可以将其分配给out字段。

如果你需要另一个例子,请告诉我。

票数 117
EN

Stack Overflow用户

发布于 2018-04-19 04:22:16

Dart 1.24引入了一种新的ty胡枝子f语法,以支持泛型函数。仍然支持以前的语法。

代码语言:javascript
复制
typedef F = List<T> Function<T>(T);

有关详细信息,请参阅https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generic-function-type-alias.md

函数类型也可以内联指定。

代码语言:javascript
复制
void foo<T, S>(T Function(int, S) aFunction) {...}

另见https://www.dartlang.org/guides/language/language-tour#typedefs

票数 30
EN

Stack Overflow用户

发布于 2019-05-05 23:49:31

代码语言:javascript
复制
typedef LoggerOutputFunction = void Function(String msg);

这看起来比以前的版本要清晰得多。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12545762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档