2009-09-23 4 views
3

Je reçois une callstack très bizarre dans mon projet Flex (AS3).Compilateur Actionscript Problème: Erreur # 1068: Array et * ne peuvent pas être réconciliés

Main Thread (Suspended: 
     VerifyError: Error #1068: Array and * cannot be reconciled.) 

J'ai été capable de le reproduire en utilisant ce bloc de code. Si vous déboguez, vous n'obtiendrez jamais la fonction "échec".

private var testArray:Array = [{},{},{}] 

private function run():void { 
    this.failure({}); 
} 

private function failure(o:Object):void { 
    for each(var el:Object in testArray) { 
    o.ids = (o.ids||[]).concat(getArray()); 
    } 
} 

private function getArray():Array { return [Math.random()]; } 

Quand je lance le programme, ce callstack est une ligne, mais ce Conole montre un grand désordre comme si elle était une erreur de segmentation:

> verify monkeyTest/failure() 
>       stack: 
>       scope: [global Object$ flash.events::EventDispatcher$ 
> flash.display::DisplayObject$ 
> flash.display::InteractiveObject$ 
> flash.display::DisplayObjectContainer$ 
> flash.display::Sprite$ 
> mx.core::FlexSprite$ 
> mx.core::UIComponent$ 
> mx.core::Container$ 
> mx.core::LayoutContainer$ 
> mx.core::Application$ monkeyTest$] 
>       locals: monkeyTest Object? * * * 

Toutes les suggestions? À votre santé.

EDIT:

Ce code ne produit l'erreur:

private function failure(o:Object):void { 
     for each(var el:Object in testArray) { 
     o.ids = o.ids || []; 
     o.ids = o.ids.concat(getArray()); 
     } 
} 

Répondre

2

Le problème est ici:

o.ids = (o.ids||[]).concat(getArray()); 

o.ids est de type * tout [] est Array, donc ils ne peuvent pas être par rapport

changement à:

o.ids = ((o.ids as Array)||[]).concat(getArray()); 
+0

Vous avez raison, cela fonctionne. Mais après quelques tests, cela n'explique toujours pas pourquoi le problème se produit. Voir ma dernière modification à la question. – Glenn

+0

Intéressant ... Je pense qu'Amarghosh a raison de dire qu'il y a un problème avec le compilateur. Je suis en train de tester sur Flex 4 SDK, je vais vous dire le résultat bientôt pour voir si nous avons vraiment besoin de signaler un bug. –

+2

Reproduit dans Flex SDK 3.4 et 4.0.0.6898. Rempli le bogue à https://bugs.adobe.com/jira/browse/ASC-3844 –

2

Cette erreur indique que le code ActionScript dans le SWF is invalid. Si vous pensez que le fichier n'a pas été endommagé, signalez le problème à Adobe. (voir la note au bas de cette page).

La plupart des erreurs de vérification sont des erreurs de compilation que le compilateur n'a pas réussi à capturer. Le reportage aidera à les corriger dans la prochaine version.

EDIT: Correction du lien, merci Glenn

+0

Je pense que vous vouliez dire ce lien: http://livedocs.adobe.com/flex/2/langref/runtimeErrors.html#note. Celui que vous avez posté n'a pas d'erreur <2000, mais il mentionne d'examiner les erreurs d'exécution de Flex 2. Merci. – Glenn

+0

Oui, merci pour la correction. – Amarghosh

+0

Est-ce que cela fonctionne? o.ids = (o.ids? o.ids: []). concat (getArray()); – Amarghosh

0

J'ai reçu cette erreur lors de la création des variables locales nommées « arguments » dans une fonction aussi bien. Le compilateur ne donne aucun avertissement, et je m'en suis parfois sorti - seulement pour que l'erreur apparaisse après avoir ajouté quelques lignes. La console donne la pile d'erreur folle et ne vous permet pas d'utiliser le débogueur FB de façon utile lorsque l'erreur se produit. Cela se produit en raison d'un conflit avec l'objet standard « arguments » disponible à partir de toutes les fonctions:

http://as3.miguelmoraleda.com/2009/03/28/actionscript-3-arguments-atributo-arguments-dentro-de-cualquier-funcion-functio/

Questions connexes