1

args[]这个想法是传递一个数组[<int>, <String>, <int>]

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

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

这样函数调用:

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

欢迎任何建议。

4

3 回答 3

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 ()

于 2013-01-24T06:56:19.227 回答
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
    }
    

希望这可以帮助。

于 2013-01-24T10:03:57.543 回答
-2

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

于 2013-01-24T08:23:10.950 回答