Erweiterungsarray in Actionscript 3 (Flex)

8

Ich versuche, Array für einen ganz bestimmten Zweck zu verändern. Wenn ich folgendes habe:

%Vor%

Warum kann ich das nicht tun?

%Vor%

trotz der Tatsache, dass ich das tun kann

%Vor%

Der Fehler, den ich erhalte, ist folgender:

Implicit coercion of a value with static type Array to a possibly unrelated type

    
Jamie Wong 22.06.2010, 05:03
quelle

3 Antworten

13

Anstatt Array zu erweitern, könnten Sie Ihre eigene Klasse schreiben, die alle Methoden von Array verfügbar macht. Durch die Verwendung der Proxy-Klasse können Sie alle Standard-Array-Methoden auf ein internes Array umleiten, haben aber dennoch die Flexibilität, eigene Methoden hinzuzufügen:

%Vor%

Beispiel:

%Vor%     
Quasimondo 22.06.2010 10:50
quelle
3

[] erstellt nur ein Array. Es kann nicht verwendet werden, um eine Unterklasse von Array zu erstellen.

Der beste Weg, Array mit neuen Funktionen zu erweitern, ist das Schreiben von Standalone-Funktionen, die reguläre Arrays manipulieren. Das Beste von allem ist, dass Sie alles mit jedem Array machen können und nicht nur auf Arrays beschränkt sind, die mit Ihrer Unterklasse erstellt wurden.

Hier ist ein einfaches Beispiel für eine Klasse, die Dienstprogrammfunktionen für Arrays enthält:

%Vor%

Verwendung:

%Vor%     
joshtynjala 22.06.2010 22:02
quelle
1

[1,2,3] ist Kurzschrift (oder syntaktischer Zucker) für new Array(1,2,3) . In diesem Sinne scheint es mehr offensichtlich, warum Ihr Code fehlschlägt.

Jedes TileArray ist ein Array , da TileArray erweitert Array ist, aber die Umkehrung ist nicht wahr: Nicht jedes Array ist ein TileArray . Sie können also kein Array übergeben, wenn ein TileArray erwartet wird. Deshalb erhalten Sie den Compilerfehler.

Casting verzögert den Fehler nur von der Kompilierzeit zur Laufzeit, da der tatsächliche Typ Ihres Objekts Array ist, was tatsächlich nicht mit TileArray zusammenhängt.

Wenn Sie die Array -Funktionalität erweitern möchten (und auch etwas syntaktischen Zucker hinzufügen können), sollten Sie vielleicht versuchen, Proxy zu erweitern, wie es bereits vorgeschlagen wurde. Denken Sie daran, es ist weniger leistungsfähig, also wenn Sie diese Klasse stark verwenden möchten, ist dies möglicherweise nicht die beste Idee.

    
Juan Pablo Califano 23.06.2010 03:49
quelle