Static Initializerを使ってみた
http://level0.kayac.com/2009/06/static_initiaizer.php
で紹介されているStaticイニシャライザを使ってみた。
どうやら、staticイニシャライザ内部で変数宣言や関数宣言すると、
ローカル変数が作られるのではなく、メンバが作られているっぽい。
なので、コンストラクタや、その他のメンバをstaticイニシャライザに入れることが可能。
ネストが一つ増えた感覚。
基本こんな書き方しないけどな。
/**
* Copyright coppieee ( http://wonderfl.net/user/coppieee )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/bEQD
*/
//http://level0.kayac.com/2009/06/static_initiaizer.php
//で紹介されているStaticイニシャライザを使ってみた。
//
//どうやら、staticイニシャライザ内部で変数宣言や関数宣言すると、
//ローカル変数が作られるのではなく、メンバが作られているっぽい。
//なので、コンストラクタや、その他のメンバをstaticイニシャライザに入れることが可能。
//
//ネストが一つ増えた感覚。
//基本こんな書き方しないけどな。
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
public class Main extends Sprite
{
//static initializer
{
public function Main()
{
var tf:TextField = new TextField();
tf.multiline = true;
addChild(tf);
tf.text = "_i :" + _i + "\n";
tf.appendText("_j :" + _j + "\n");
tf.appendText("f() :" + f() + "\n");
tf.appendText("_l : " + _l);
}
private function f():int
{
return _i;
}
private var _i:int = 1;
private static var _j:int = 1;
//コンパイルエラー 未定義のプロパティ
//インスタンスメンバは弄れないっぽい。
//_i =2;
_j = 2;
//変数宣言は、ローカル変数にならない。
//internal var _k:int = 5; と同じ。
var _k:int = 5;
private static var _l:int = 0;
//ローカル変数を使いたいときは無名関数でくくって使おうね。
(function():void {
for (var i:int = 0; i < 10; i++ )
{
_l += i;
}
})();
}
}
}