AS3 ... (отдых) параметр - PullRequest
2 голосов
/ 09 июня 2009

Я тестировал следующий код:

function aa(...aArgs):void
{
    trace("aa:", aArgs.length);
    bb(aArgs);
}
function bb(...bArgs):void
{
    trace("bb:", bArgs.length);
}
aa(); //calling aa without any arguments.

Вывод:

aa: 0 //this is expected.
bb: 1 //this is not!

Когда я передаю пустые аргументы (aArgs) в функцию bb; не должен ли он вернуть 0 длины? Похоже, функция bb обрабатывает переданные aArgs как непустые / ненулевые ..

Что мне здесь не хватает?

Любая помощь приветствуется. привет ..

Ответы [ 3 ]

9 голосов
/ 09 июня 2009

Похоже, что aArgs, идущий в функцию bb (), будет пустым массивом, но, тем не менее, массивом ... Я бы сказал, что результат должен быть ожидаем Хотя я не совсем уверен, как бы я отформатировал его по-другому, чтобы получить желаемый результат ...

Обновление 1:

Я хотел немного уточнить. То, что у вас есть, в основном то же самое, что и

function aa(...aArgs):void
{
    myArray:Array = aArgs;
    bb(myArray);
}
function bb(...bArgs):void
{
    trace("bb:", bArgs.length);
}
aa(); //calling aa without any arguments.

Если бы вы увидели этот код, вы бы ожидали, что bb: 1 да?

Обновление 2:

Этот поток: заполнение (... rest) параметров массивом? выглядит так, как будто это будет актуально. Он использует функцию apply () для передачи массива в виде списка параметров. http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Function.html#apply()

6 голосов
/ 17 июня 2009

Не знаю, актуально ли это, но вы можете попробовать это:

function aa(...aArgs):void {
    var myArray:Array = aArgs;
    bb.apply( this, myArray );
}
function bb(...bArgs):void {
    trace("bb:", bArgs.length);
}
aa(); //calling aa without any arguments.

В основном Function.apply - ваш друг здесь.

2 голосов
/ 10 июня 2009

Это имеет смысл и работает правильно. ... rest всегда создает массив, если в нем нет переданных значений, создается пустой массив, как вы видите, отслеживая его длину. Таким образом, причина, по которой bb имеет один объект в массиве ... rest, заключается в том, что вы передаете пустой массив в bb в качестве значения, которое вставляется в первую позицию массива, сгенерированного bb's ... rest, давая ему длина одного.

...