在 Dart 中将变量转换为 function/method 指针? (代表?)

Cast a variable as a function/method pointer in Dart? (Delegate?)

假设我有一个在其中存储 functions/methods 的 Map 类型,如下所示:

Map triggerHandler = {
  'x' : (t) => hello(t)
};

现在,我接下来要做的是声明这些Map值的Type是函数。

我总能做到:

Map<String, dynamic> triggerHandler = {
  'x' : (t) => hello(t)
};

但这无助于阻止程序员将非函数放入 Map 值中。 'x' 可以是字符串或整数。

我之所以要这样做是因为我有一个函数只需要接受以函数为值的地图。调用'x'的数组key是函数时由triggerHandlerx完成,而不是triggerHandler[x]。我还没有测试这是否会导致错误发生,但这对我来说似乎在语义上不正确。

看起来最合乎逻辑的方法是将值的类型设置为函数。例如给 Map 一个类型转换值 'delegate':

Map<String, delegate> triggerHandler = { // Note, this won't work
  'x' : (t) => hello(t)
};

在 Dart 中执行此操作的正确方法是什么? (如果有办法) 谢谢。

您可以使用 Function 作为类型,或者如果您还想指定这些函数的参数和 return 类型,您可以创建类型定义。

Map<String, Function> triggerHandler = {
  'x' : (t) => hello(t)
};
typedef int SomeName(SomeType arg1);

Map<String, SomeName> triggerHandler = {
  'x' : (t) => hello(t)
};