在Javascript中,可以使用apply
将参数从一个函数批量移动到另一个函数?怎么在Dart完成?
使用Dart和Javascript的不匹配:
Object proxy(<any number and type of arguments>) {
if(feelGood)
return goodFunc.apply(arguments);
else
return badFunc.apply(arguments);
}
在Dart中,如何
指定任何数量和类型的参数?
将参数从一个函数应用到另一个函数吗?
答案 0 :(得分:3)
您无法创建在Dart中接受任意数量参数的函数。为此,你必须依靠noSuchMethod。要使用动态参数列表调用函数,可以使用Function.apply。
示例:
class _MyProxy implements Function {
const _MyProxy();
noSuchMethod(InvocationMirror m) {
if (m.memberName != #call) return super.noSuchMethod(m);
return Function.apply(feelGood ? goodFunc : badFunc, m.positionalArguments, m.namedArguments);
}
}
const Function proxy = const _MyProxy();
此类使用noSuchMethod捕获无效调用。它通过拦截“呼叫”方法起到作用。然后它通过使用Function.apply将参数转发到goodFunc或badFunc来作为您的代理方法。
然后你可以写:
proxy(<any number and type of argument>);
并让它使用那些确切的参数调用goodFunc或badFunc。
答案 1 :(得分:2)
您可以使用Function.apply:
main() {
final l = [];
Function.apply(l.add, ['v1']);
print(l); // display "[v1]"
}
Dart不支持方法上的varargs,但您可以使用noSuchMethod
模拟它们(请参阅Creating function with variable number of arguments or parameters in Dart)