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

ОК, так что мы все знаем, что использование параметра ... (rest) в функции позволяет нам передавать любое количество аргументов, как в примере в руководстве по Adobe AS3:

function traceArgArray(x: int, ... args) {

for (var i:uint = 0; i < args.length; i++) {

trace(args[i]);

}

} 

traceArgArray(1, 2, 3);

НО, что бы мне хотелось сделать, это иметь возможность ЛИБО передавать отдельные аргументы ИЛИ передавать аргументы из уже существующего массива:

myArray:Array = new Array(1,2,3);

и так:

traceArgArray (туАггау);

Как я уже писал, функция обрабатывает myArray как один объект, поэтому на выходе получается 1,2,3 - представление массива в целом, а не отдельного содержимого массива.

Чтобы преобразовать myArray в список с разделителями-запятыми, который оператор остальных распознал бы как список отдельных элементов, я попытался сделать следующее:

traceArgArray(myArray.join());

но это не изменило вывод. Похоже, что в этом случае аргумент интерпретируется как одна строка, а не как разделенный запятыми список.

Итак, загадка, с которой, я надеюсь, кто-то может мне помочь, может быть выражена одним из двух способов:

Можно ли заставить параметр rest обрабатывать аргумент массива как список аргументов, разделенных запятыми?

-или-

Есть ли способ, которым я могу преобразовать массив в список, разделенный запятыми, и затем передать этот список функции AS в виде списка, разделенного запятыми (а не длинной строки), чтобы оператор rest мог правильно его интерпретировать?

Основная вещь, которую я хочу сделать - возможность передавать массивы значений в функции, которые принимают любое количество аргументов, - может показаться полезной, поэтому, возможно, есть обходной путь, которого я не вижу потому что я зациклен на самом операторе отдыха.

Спасибо за чтение!

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

То, что вы ищете, это Function.apply () . В вашем случае это будет выглядеть так:

myArray:Array = new Array(1,2,3);

function traceArgArray(x: int, ... args) {
    for (var i:uint = 0; i < args.length; i++) {
        trace(args[i]);
    }
} 

traceArgArray.apply(this, [0].concat(myArray)); // [0] being the first argument (x)
1 голос
/ 09 июля 2011

См.

AS3 ... (rest) параметр

, и на это есть ссылка в приведенном выше:

Аргументы AS3

и это также может быть полезно

заполнение (... rest) параметров массивом?

0 голосов
/ 24 апреля 2012

Я думаю, что в этом случае дело скорее в обработке аргументов, чем в попытке вызвать метод по-другому ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...