2008-12-12 11 views
6

Czy jest jakiś sposób, że mogę odwołać var ​​lub const jako wartości domyślnej dla argumentu funkcji w ActionScript 3.Ustawienie argumentu funkcji w ActionScript 3

mogę określić wartości domyślne jak null, łańcuch, int.

function a(b = null) { 
    blah... 
}

Ale to, co chcę zrobić, to

function a(b = function(){}) { 
    blah... 
}

którym wydaje się, że nie byłoby sposób to zrobić. Przypuszczalnie przez const

Odpowiedz

8

Dziwne, wydaje się, że nie możesz tego zrobić, przynajmniej nie mogłem go uruchomić, nie przyjmuje żadnych odniesień do funkcji statycznych jako wartości domyślnej.

Najlepsze co mogłem zrobić to w ten sposób:

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

Jak sidenote Właśnie odkryłem, że można w rzeczywistości zadeklarować funkcje tak:

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

Ale to wydaje się działać w ten sam sposób jako deklarujące im rozsądną drogę, więc też nie ma szczęścia.

+0

Czy nie jest bardziej konwencjonalny napisać: publicznego funkcja statyczna STATICFUNC(): void { trace ("Im static!"); } –

+0

OOPS. Musi to być błąd, ale nie powinno być nawiasów po functionArgument() i defaultFunction(), ponieważ nie chcemy rezultatu funkcji, ale odwołanie do samej funkcji? –

1

Domyślne parametry muszą być stałymi w czasie kompilacji, ponieważ kompilator musi wpisać domyślną wartość podczas kompilacji kodu. Oznacza to, że funkcje statyczne, bez względu na to, jak są przewidywalne, nie mogą być używane jako wartości domyślne parametrów. Stałe kompilacji to wartości, o których wie kompilator, sprawdzając kod, ale nie uruchamiając go.

1

Zgadzam się z grapefrukt.

Jednak w przypadku, gdy chcesz tworzyć nowe obiekty na siebie nazwać można to zrobić:

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

lub przedmiotu:

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

function defaultFunction():void 
{ 
    trace('default function invoked') 
} 
Powiązane problemy