Flex如何使用可变数量的参数调用函数?

时间:2010-10-04 04:14:41

标签: flex flash actionscript-3 actionscript air

让我说我有这个课程:

package{
  import flash.display.Sprite;
  public class Main extends Sprite{
    public function Main(){
        trace(getAverage(1,2,3));
        trace(getAverage(1,2,3,4));
        trace(getAverage(1,2,3,4,5));
    }
    public function getAverage (...numbers) {
      var total = 0;
      for (var i = 0; i < numbers.length; i++) {
        total += numbers [i];
      }
      return total / numbers.length;
    }
  }
}

我如何实现这个“相反”?也就是说,我怎么能用动态数量的参与者来调用'getAverage'?

例如,如果我想做某事 LIKE

var r:int=Math.random()*6;
var a:Array=new Array();
for (i:int=0;i<r;i++) {
  a[i]=Math.random()*22;
}
// Now I have 'r' Number Of Parameters Stored In 'a'
//   How Do I Call getAverage, with all the values in 'a'??
//   getAverage(a) isn't right, is it?
//   I'm looking for something similar to getAverage(a[0],a[1],a[...]);

var av:Number=getAverage(???);

我想知道的是,如果我有一个带有可变数量参数的函数,这很好,但是如果在运行时不知道该数字,我怎么能用可变数量的参数调用它?可能这是不可能的......我只是不确定,因为'callLater'似乎能够以某种方式从一个数组中生成一个动态数量的参数......

注意:仅包含“您为什么要这样做?”的答案将会被投票。

P.S。这不是关于计算平均值! REALIZE 有更简单的方法可以做到这一切! (我可以写getAverage来接受单个数组作为它唯一的参数)上面只是一个示例来说明我的问题。如何将动态数量的参数传递给函数?

5 个答案:

答案 0 :(得分:9)

这是你要找的吗?

var av:Number = getAverage.apply(null, a);

答案 1 :(得分:3)

戴夫是对的。您可以使用函数的apply方法传入参数数组。

以下是对其工作原理的更好解释以及apply的参数是什么: http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/Function.html

另请注意,您可以使用call方法执行相同的操作,但使用... args(逗号分隔列表),但apply更适合您的情况。

答案 2 :(得分:0)

您的问题的问题是arguments对象已经是一个数组,并且使用(... args)已经为您提供了一种动态方式来传递您需要的任意数量的参数。对前一个答案感到抱歉,没想到......

答案 3 :(得分:0)

您可以使用这些参数创建数组或对象,并将该对象传递给该函数。这很正常。

答案 4 :(得分:0)

Flash具有相当强大的内省功能。因此,您只需传递一个具有您需要的任意数量属性的动态对象,而不是传递大量对象:

var ob:Object={arg1:"value1", arg2:8}; 
var arg:String="arg4";
ob["arg3"]=8;
ob[arg]=18;
trace (ob.hasOwnProperty("arg1"));
trace (ob.arg3);
trace (ob.arg4);

这应该涵盖您可能需要的任何用例。缺点是这允许一些相当聪明且难以追踪的错误。 : - )