====== メンバにメソッドや関数オブジェクトを入れた時の動作 ======
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とかしたいときとかは上の書き方だと役に立たないですね。