次の actionscript3 プログラムを実行しようとしましたが、f() 関数の呼び出し結果に驚きました。f() の結果が「1」または少なくとも「未定義」であることを期待していましたが、「0」の値は意味がありません。
この動作について説明がある場合、またはこの動作を「正常」と見なすかどうかを教えていただければ幸いです。AVM2 が実際にどのように機能するかを理解するために、Action Script プログラムの動作を研究していることを正確に述べたいと思います。したがって、同等のコードに同じことを行うよう求めているわけではありません。結果として、他のトリッキーな例があれば、私も興味があります。
package {
import flash.display.Sprite;
public class S2 extends Sprite {
public function f():* {
return x;
}
public static function fs():*{
return x;
}
}
}
var x:int = 1 ;
var a:S2 = new S2();
var g:Function = a.f;
var gs:Function = S2.fs;
trace("tracing(g)...:"+g()); //tracing(g)...:0
trace("tracing(gs)...:"+gs()); //tracing(gs)...:1
注: このプログラムを次のコマンド ラインでコンパイルしました。
mxmlc -debug -static-link-runtime-shared-libraries=true -output S2.swf -- S2.as