在Dart中将变量转换为函数/方法指针? (代表?)

时间:2015-01-05 17:35:11

标签: function methods casting dart

假设我有一个Map类型,可以在其中存储函数/方法,如下所示:

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

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

我总能做到这一点:

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

但这并不能阻止程序员将非函数放入Map值。 &#39; X&#39;然后可以是String或整数。

我想这样做的原因是因为我有一个函数需要只接受带有函数值的地图。调用&#39; x&#39;的数组键当它是一个函数而不是triggerHandler [x]时,由triggerHandlerx完成。我还没有测试过是否会导致错误发生,但这对我来说在语义上并不正确。

似乎最合乎逻辑的方法是将值的类型设置为函数。例如给Map一个类型的铸造价值&#39; delegate&#39;:

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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