2008-10-17 5 views
5

Warum Inline-Schließungen so selten in Actionscript verwendet werden? Sie sind sehr mächtig und ich denke, dass sie gut lesbar sind. Ich sehe kaum jemanden, der sie benutzt, also schaue ich mir vielleicht den falschen Code an. Google verwendet sie in ihrer Google Maps API für Flash-Beispiele, aber ich denke, das ist der einzige Ort, an dem ich sie gesehen habe.Verwendung von Inline-Schließungen/Funktion Delegaten in Actionscript

Ich bevorzuge sie, weil Sie Zugriff auf lokale Variablen in dem Bereich haben, der sie definiert, und Sie behalten die Logik in einer Methode und am Ende mit vielen Funktionen, für die Sie mit einem Namen kommen müssen.

Gibt es irgendwelche Fänge, sie zu benutzen? Funktionieren sie ungefähr genauso wie in C#?

Ich habe gerade erst entdeckt, dass AS3 sie unterstützt, und ich bin ziemlich genervt, weil ich dachte, ich lese, dass sie in AS # veraltet waren. Also benutze ich sie wieder!

private function showPanel(index:int):void {  

_timer = new Timer(1000, 1);   
_timer.addEventListener(TimerEvent.TIMER, function(event:Event):void 
{ 
    // show the next panel 
    showPanel(index++); 
}); 

Antwort

3

Der größte Fehler, auf den man achten sollte, ist, dass oft "das" nicht im Inline-Verschluss definiert ist. Manchmal können Sie ein "Dies" festlegen, aber es ist nicht immer das Richtige, das Sie einstellen könnten, je nachdem, wie Sie es verwenden.

Aber ich würde sagen, dass der Großteil des Flex-Codes, an dem ich gearbeitet habe, Inline-Schlüsse im Quellcode hatte - da Callbacks die einzige Möglichkeit sind, Arbeit zu erledigen, und oft brauchen Sie das nicht eine ganze separate Funktion.

Manchmal, wenn die geschachtelte Funktion zu viel wird, werde ich es leicht mit Funktionsvariablen in der Funktion ausbrechen; Das hilft mir, ein wenig zu organisieren, indem ich den Funktionen Beschriftungen gebe, aber einige Eigenschaften von Inline-Schließungen beibehalte (z. B. Zugriff auf die lokalen Variablen).

Hoffe, das hilft.

1

fand ich, was ursprünglich mich dies will nicht tun, aber ich die Details vergessen hatte:

http://livedocs.adobe.com/flex/3/html/16_Event_handling_6.html#119539

(Dies ist, was Mitch erwähnt - so weit das ‚this‘ Schlüsselwort ist aus scope)

Also das ist die Antwort von Adobe, aber ich bin viel wahrscheinlicher auf lokale Variablen als 'das' zu verweisen.

Wie interpretieren andere die Empfehlung von Adobe?

2

Ein zusätzliches Problem ist, dass die Speicherbereinigung bei Schließungen (zumindest in Flash 9) unterbrochen ist. Die erste Instanz eines gegebenen Abschlusses (von einem lexikalischen Standpunkt aus betrachtet) wird niemals Müll gesammelt - zusammen mit allem anderen, auf das der Abschluss in der Scope-Kette Bezug nimmt.

Verwandte Themen