【问题标题】:How are arguments moved in bulk from one function to another, in Dart?在 Dart 中,参数是如何从一个函数批量移动到另一个函数的?
【发布时间】:2013-11-22 08:29:38
【问题描述】:

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

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

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

【问题讨论】:

    标签: dart apply


    【解决方案1】:

    你不能在 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。

    【讨论】:

      【解决方案2】:

      你可以使用Function.apply

      main() {
        final l = [];
        Function.apply(l.add, ['v1']);
        print(l);  // display "[v1]"
      }
      

      Dart 不支持方法上的可变参数,但您可以使用 noSuchMethod 模拟它们(请参阅 Creating function with variable number of arguments or parameters in Dart

      【讨论】:

      • 进展顺利 - 但似乎是一个非常简单的问题的解决方案。我投票支持 Dart 在参数中包含“...”并让程序员处理它。
      猜你喜欢
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2017-11-04
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      相关资源
      最近更新 更多