PDA

Просмотр полной версии : Не вызывается arguments


Волгоградец
13.11.2009, 17:43
Привет.
У меня не вызывается arguments не из FD, не из IDE. Может есть какая хитрость?

GentleFLASH
13.11.2009, 19:33
смотря как и откуда вызывать )

SamFR
13.11.2009, 23:33
В AS3 всё немного поменялось.

1) Этот пример

function f(a:Number, b:Number, c:Number):void{
trace(arguments);
}

f(1, 2, 3); //выводит 1, 2, 3

откомпилится и сработает без ошибок.

2) Этот

function f():void{
trace(arguments);
}

f(1, 2, 3); //ERROR

вызовет ошибку компиляции, т.к. в AS3 вы не можете передавать произвольное количество параметров, явно не указав на это.

3) Следующий пример

function f(...args:Array):void{
trace(arguments); //ERROR
}

f(1, 2, 3);

также вызовет ошибку компиляции, т.к. arguments у вас теперь называется args.

4) А вот этот

function f(...args:Array):void{
trace(args);
}

f(1, 2, 3); //выводит 1, 2, 3

заработает как надо.

P.S. Мне осталось непонятным, что делать в данной ситуации:

function f(a:Number, ...args:Array):void{
trace('args: ' + args);
}

f(1, 2, 3); //выводит args: 2, 3

Понятно, то первый аргумент доступен через переменную a, но нельзя ли как-нибудь обратиться ко всем аргументам сразу, в виде массива? Я, помнится, когда-то пробовал поэкспериментировать, но так ничего из этого и не вышло.

Psycho Tiger
14.11.2009, 19:42
args.shift(a); ?

SamFR
14.11.2009, 19:55
Ну эт понятно. Нет, я говорил о другом. Представим, что таких параметров... ну 10 хотя бы :)

На самом деле, практической пользы в этом особой нет, просто интересно)

bicubic_bublic
15.11.2009, 00:04
args.shift(a); ?

args.unshift(a);