2009-02-23 5 views
6

Имеет ли ActionScript 3.0 какие-либо средства для принятия произвольного количества параметров? Обычно я использую .NET, но я вынужден использовать AS3 для проекта, и что-то вроде функций blah (params double [] x) было бы удивительным для вспомогательной библиотеки.Произвольное число параметров в AS3

Thanks;

ответ

14

Заканчивать параметр остальные: http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/statements.html#..._(rest)_parameter

package { 
    import flash.display.MovieClip; 

    public class RestParamExample extends MovieClip { 
    public function RestParamExample() { 
     traceParams(100, 130, "two"); // 100,130,two 
     trace(average(4, 7, 13));  // 8 
    } 
    } 
} 


function traceParams(... rest) { 
trace(rest); 
} 

function average(... args) : Number{ 
    var sum:Number = 0; 
    for (var i:uint = 0; i < args.length; i++) { 
    sum += args[i]; 
    } 
    return (sum/args.length); 
} 
+0

Можно ли указать тип для args? т.е. ... args: int? –

+2

Nevermind - вы не можете –

3

Попробуйте эллипс (как C) ...

function trace_all (... args): void { 
    for each (a in args) { 
     trace (a); 
    } 
} 
0

Если вы хотите пройти неопределенное количество упорядоченных значений просто передать массив

function foobar(values:Array):void 
{ 
    ... 
} 


foobat([1.0, 3.4, 4.5]); 
foobat([34.6, 52.3, 434.5, 3344.5, 3562.435, 1, 1, 2, 5]); 

Если вы хотите передать именованные параметры, в которых переданы только некоторые из них, используйте объект

function woof(params:object):string 
    { 
     if (params.hasProperty('name')) { 
      return name + "xxx"; 
     } 
     ... 
    } 

    woof({name:'Joe Blow', count: 123, title: 'Mr. Wonderful'}); 
2

В дополнение к параметру «rest», есть «arguments» объект.

function foo() { 
    for (var i:Number = 0; i < arguments.length; i++) { 
     trace(arguments[i]); 
    } 
}