メンバにメソッドや関数オブジェクトを入れた時の動作

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とかしたいときとかは上の書き方だと役に立たないですね。