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

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

sample/member_method_fun.txt · 最終更新: 2012/08/21 23:13 by sukai
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0