Длина аргумента Function.length и variable (... rest) [AS3] - PullRequest
0 голосов
/ 20 апреля 2011

Можно ли определить, определила ли (анонимная) функция параметр ... (rest) в ActionScript 3?Я знаю, что есть свойство function.length, но оно учитывает только явно определенные аргументы.

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Есть способ определить, если функция определила параметр ... rest, но вы можете определить это только в теле функции.За пределами тела функции она имеет 0 параметров, как показано в первом выводе трассы.На самом деле этот параметр ... rest является массивом, который имеет область видимости только внутри тела функции.Однако, как только вы окажетесь внутри тела функции, вы можете проверить его, как показано на втором и третьем выходах трассировки.

    public function Test()
    {
        trace(doSomething.length);
        doSomething(7, 8, 9, 10);
    }

    public function doSomething(...numbers):void
    {
        if (numbers.length > 0) trace("Found the parameters!");
        for (var i:int = 0; i < numbers.length; i++) trace(numbers[i]);
    }

Output: 0    
Output: Found the parameters!    
Output: 7 8 9 10
1 голос
/ 20 апреля 2011

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

http://tobyho.com/Modifying_Core_Types_in_ActionScript_3_Using_the_Prototype_Object

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