代码之家  ›  专栏  ›  技术社区  ›  Glenn

Actionscript编译器问题:错误#1068:数组和*无法协调

  •  3
  • Glenn  · 技术社区  · 16 年前

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

    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()]; } 
    

    > 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? * * *   
    

    编辑:

    private function failure(o:Object):void {
          for each(var el:Object in testArray) {
            o.ids = o.ids || [];
            o.ids = o.ids.concat(getArray());
          } 
    }
    
    3 回复  |  直到 16 年前
        1
  •  2
  •   Andy Li    16 年前

    问题就在这里:

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

    o.ids 是类型 * [] Array

    o.ids = ((o.ids as Array)||[]).concat(getArray());
    
        2
  •  2
  •   Amarghosh    16 年前

    此错误表示ActionScript在 SWF is invalid 。如果您认为文件没有损坏,请向Adobe报告问题。(见该页底部的注释)。

    大多数验证错误是编译器未能捕获的编译器错误。报告将有助于在下一版本中修复这些问题。

    编辑:更正了链接,谢谢Glenn

        3
  •  0
  •   Jonathon Stierman    16 年前

    在函数中创建名为“arguments”的局部变量时,我也收到了这个错误。编译器不会发出任何警告,我有时也会逃脱惩罚——只是在添加几行代码后,错误又会弹出。控制台提供了疯狂的错误堆栈,当错误发生时,不允许您以任何有用的方式使用FB调试器。这是由于与任何函数中可用的标准“arguments”对象冲突造成的:

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