如何将包含所有参数的数组传递给在ActionScript 3中请求多个参数的函数?

时间:2013-01-24 06:46:40

标签: actionscript-3 flex4

我们的想法是传递一个args[]

的数组[<int>, <String>, <int>]

接受多个参数的函数,如:

myFunc (int arg1, String arg2, int arg2 ):void

这样的函数调用:

myFunc(args[]);可以在不改变原始函数调用的情况下实现。

欢迎任何建议。

3 个答案:

答案 0 :(得分:7)

您可以使用Function.apply()

在你的情况下

myFunc.apply(null,args);

你的args []应该包含与你的数据类型匹配的myFunc args列表的相同顺序。

这样你就无法改变原有的功能。

明智的表现apply()并不是那么好。您可以使用其他情况call()

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Function.html#apply()

答案 1 :(得分:0)

严格来说,不支持多态,所以如果你的函数有这个签名:

myFunc (arg1:int, arg2:String, arg3:int):void

myFunc(array);的任何调用都会引发编译错误。 有两种方法可以达到我想要的效果:要么将第一个arg定义为:*,要么使用特殊的AS3 ...rest

  1. 第一个解决方案,函数定义如下:

    myFunc (arg1:*, arg2:String = null, arg3:int = null):void{
      if(arg1 is Array){
        var array:Array = arg1 as Array;
        arg1 = array[0] as int;
        arg2 = array[1] as String;
        arg3 = array[2] as int;
      }
      //here you would have to verify your args for coherence
      ...//your code here
    }
    
  2. 第二种解决方案(我更喜欢它,但它主要是'味道'):

    myFunc (...rest):void{
      var array:Array = rest[0] as Array,
          arg1:int = rest[0] as int,
          arg2:String = rest[1] as String,
          arg3:int = rest[2] as int,
      if(array is Array){
        arg1 = array[0] as int;
        arg2 = array[1] as String;
        arg3 = array[2] as int;
      }
      //here you would have to verify your args for coherence
      ...//your code here
    }
    
  3. 希望这会有所帮助。

答案 2 :(得分:-2)

myFunc(args [0],args [1],args [2]);