Actionscript 3 AS3:范围界定问题-警告此中的范围界定更改

Actionscript 3 AS3:范围界定问题-警告此中的范围界定更改,actionscript-3,apache-flex,Actionscript 3,Apache Flex,我想在Flex中启用所有编译器警告,以便在代码中解决它们。但有一个警告我不知道如何解决它。下面是一些示例代码: package lib { import flash.events.NetStatusEvent; import flash.net.NetConnection; public class player { private function tmp(event:NetStatusEvent):void {

我想在Flex中启用所有编译器警告,以便在代码中解决它们。但有一个警告我不知道如何解决它。下面是一些示例代码:

package lib
{
    import flash.events.NetStatusEvent;
    import flash.net.NetConnection;

    public class player
    {
        private function tmp(event:NetStatusEvent):void
        {
        }

        public function player():void
        {
            super();
            var connection:NetConnection = new NetConnection();
            connection.addEventListener(NetStatusEvent.NET_STATUS, tmp);
        }
    }
}
在使用-warn作用域更改进行编译时,我得到以下警告:

/var/www/test/src/lib/player.as(16): col: 59 Warning: Migration issue: Method tmp will behave differently in ActionScript 3.0 due to the change in scoping for the this keyword. See the entry for warning 1083 for additional information.

            connection.addEventListener(NetStatusEvent.NET_STATUS, tmp);
将tmp作为函数放在player()中会起作用,但这不是我想要的。我甚至尝试使用this.tmp作为回调,但没有区别。有人知道如何解决此编译器警告吗?

这是代码迁移警告。当对象的方法用作值(通常用作回调函数)时,会生成此警告。在ActionScript2.0中,函数在调用它们的上下文中执行。在ActionScript 3.0中,函数总是在定义它们的上下文中执行。因此,变量名和方法名被解析为回调所属的类,而不是相对于从中调用回调的上下文,如下例所示:

class a 
{ 
   var x; 
   function a() { x = 1; } 
   function b() { trace(x); } 
}

var A:a = new a();
var f:Function = a.b; // warning triggered here
var x = 22;
f(); // prints 1 in ActionScript 3.0, 22 in ActionScript 2.0

该警告仅用于让您知道,在将代码从AS2迁移到AS3的情况下,代码的行为可能已经改变(编译器事先无法知道)。当您将代码从AS2迁移到AS3时,您应该只启用编译器选项
-warn scoping change


因此,正如我在评论中所说的,您不应该担心这个警告,因为显然您的代码不是您的情况,您不需要启用编译器选项。

不要担心这个警告,它只适用于将代码从AS2迁移到AS3时,显然,你的代码不是你的情况。我喜欢它在最严格的模式下编译。所以,我的目标是解决这个警告,即使它不是真的需要。你有什么在你的tmp功能?如果是,请提供内容。这是“原始”代码。这意味着我已经将我的应用程序简化为这个测试用例。但正是这段代码触发了警告。是否为任何as3程序显示了警告,或者如果删除
connection.addEventListener(NetStatusEvent.NET_STATUS,tmp),警告是否会消失行?如果在某个地方传递函数,它似乎总是会显示出来,因为这个函数在as2和as3中的行为不同。很遗憾破坏了你对编译器警告的理想信念,但它们是由人编写的,并且是为人编写的。我已经阅读了文档,但它并没有帮助我解决这个问题。你根本不应该担心它。正如@danii在他的评论中提到的,这只是为了“引起您的注意”,如果您以前使用过AS2,某些行为可能会让您感到惊讶。尽管如此,代码是绝对正确的。代码可能是正确的,但我想知道为什么Flex会抱怨回调。我更愿意启用所有警告,以防将来我会犯“错误”。因此,我正在试图找到一种解决此警告的方法。@swordragon默认情况下,您将看到所有有意义的警告。很好,你担心清晰的代码。但这些迁移警告只表示“嘿,看,现在是ActionScript3,如果您以前使用ActionScript2编写,它的行为可能会出乎意料”。这只是为了引起你的注意而已。这意味着这个警告在这段代码中是毫无用处的。在这种情况下,我会认为这可能是Flex编译器中的一个错误。我将继续尝试寻找解决方案,如果失败,我将在Adobe bugtracker上打开一个bugreport。但是,在这段代码上触发此警告肯定有原因。@swordragon文档中提到了原因。你最好关掉这个选项。