====== メンバにメソッドや関数オブジェクトを入れた時の動作 ====== Xtalの関数とかファイバーってクロージャなのでローカル変数を保持できて便利です。リロードするときとか(メンバ変数を直接参照(_が先頭についている状態)しているファイバーをリロードすると動作がおかしくなる)。というかそれ以外で便利な時が思いつきません。 で、こいつをメンバ変数として保持させると動作が妙になるわけです。それのメモです。 class Hoge { + _f : null; + _m : null; initialize() { _f = fiber(){"f".p;} _m = method(){"m".p;} } m2() { "m2".p; } } hoge : Hoge(); hoge.m2; // ()がなくてもいいわけです hoge.m2(); // ()があってもいいわけです hoge.m(); // 出力なし hoge.m()(); // > "m" hoge.f(); // 出力なし hoge.f()(); // > "f" はい。()が2つ必要です。これを回避するには class Hoge { // - も # もつけてはいけない _f : null; _m : null; initialize() { _f = fiber(){"f".p;} _m = method(){"m".p;} } m2() { "m2".p; } f(){_f();} m(){_m();} } hoge : Hoge(); hoge.m2; // ()がなくてもいいわけです hoge.m2(); // ()があってもいいわけです hoge.m(); // > "m" hoge.f(); // > "f" というか当たり前すぎます。 fiberをhaltとかしたいときとかは上の書き方だと役に立たないですね。