在Dart中,参数如何从一个函数批量移动到另一个函数?

时间:2013-11-22 08:29:38

标签: dart apply

在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中,如何

  • 指定任何数量和类型的参数?

  • 将参数从一个函数应用到另一个函数吗?

2 个答案:

答案 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