Dart允许类使用call
和noSuchMethod
方法像函数一样发挥作用。
请考虑以下课程:
class Wrapper<T extends Function> {
Wrapper(this._function);
final T _function;
@override
noSuchMethod(Invocation invocation) {
return Function.apply(
_function,
invocation.positionalArguments,
invocation.namedArguments,
);
}
}
使用此类,完全有可能将其用作如下功能:
dynamic myFunction = Wrapper((int foo) => foo);
print(myFunction(42)); // prints 42
但是这个dynamic
困扰着我很多。如果我们删除它,则将类分配给函数将不会编译(也不会进行强制转换):
int Function(int) myFunction = Wrapper((int foo) => foo);
'Wrapper <(int)→int>'类型的值不能分配给'(int)→int'类型的变量。
那是为什么,我该怎么做才能删除此dynamic
?