Установка значения по умолчанию для аргумента функции в actionscript 3

Есть ли способ, которым я могу ссылаться на var или const в качестве значения по умолчанию для аргумента функции в actionscript 3.

Я могу определить значения по умолчанию, такие как null, string, int.

function a (b = null) {
   бла ...
}

Но то, что я хочу сделать, это

function a (b = function () {}) {
    бла ...
}

что кажется, что был бы способ сделать. Предположительно через const

12.12.2008 18:51:38
3 ОТВЕТА
РЕШЕНИЕ

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

Лучшее, что я мог сделать, это:

public function myFunction(functionArgument:Function = null):void {
    if (functionArgument != null) {
        functionArgument();
    } else {
        defaultFunction();
    }
}

В качестве идентификатора я только что обнаружил, что вы на самом деле можете объявлять такие функции:

public static const STATICFUNC:Function = function():void { trace("i'm static!") };

Но это, кажется, работает так же, как объявлять их вменяемым образом, так что и в этом нет никакой удачи.

8
13.12.2008 11:25:11
Разве не принято писать: public static function STATICFUNC (): void {trace ("Im static!"); }
Theo.T 17.02.2009 17:56:22
OOPS. Должно быть ошибкой, но после functionArgument () и defaultFunction () не должно быть круглых скобок, так как мы не хотим, чтобы результат функции, а ссылка на саму функцию?
Theo.T 17.02.2009 18:10:03

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

1
17.02.2009 16:57:34

Я согласен с грейпфрутом.

Но если вы хотите создавать новые объекты при каждом вызове, вы можете сделать это:

function myFunction(f:Function = null):void
{
    f = (f != null) ? f : function():void{ trace('new function'); }
}

или конечно:

function myFunction(f:Function = null):void
{
    f = (f != null) ? f : defaultFunction; 
}

function defaultFunction():void
{
   trace('default function invoked')
}
1
17.02.2009 18:08:02