0

Flex のすべてのコンパイラ警告を有効にして、コード内で解決したいと考えていました。しかし、解決方法がわからないという警告が1つあります。コード例を次に示します。

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-scoping-change-in-this でコンパイルすると、次の警告が表示されます。

/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);

player() 内の関数として tmp を配置すると機能しますが、これは私が望むものではありません。this.tmp をコールバックとして使用しようとしましたが、違いはありません。誰かがこのコンパイラ警告を解決する方法を知っていますか?

4

2 に答える 2

1

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/compilerWarnings.html

これはコード移行の警告です。この警告は、オブジェクトのメソッドが値として (通常はコールバック関数として) 使用された場合に生成されます。ActionScript 2.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
于 2013-02-22T10:01:57.933 に答える
0

その警告は、コードを AS2 から AS3 に移行する場合にコードの動作が変更された可能性があることを知らせるためにのみ配置されます (コンパイラーは事前に知る方法がありません)。コードを AS2 から AS3 に移行する場合にのみ、コンパイラ オプションを有効にする必要があります。-warn-scoping-change-in-this

したがって、コメントで述べたように、その警告について心配する必要はありません。明らかにあなたのケースではないコードを見て、そのコンパイラ オプションを有効にする必要がないからです。

于 2013-02-22T10:36:02.403 に答える