Hatena::Groupsubtech

#生存戦略 、それは

-> 08 { 07 / 11 }

ゆの in ActionScript3

16:55 | はてなブックマーク - ゆの in ActionScript3 - #生存戦略 、それは

package {
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.utils.*;

    public class Yuno extends Sprite {
        public function Yuno() {
            X / _ / X < 来週も見てくださいね
        }

        public function get X():*{
            return new X365(tf);
        }

        public function get _():Number {
            return tf.appendText('ひだまり') as Number;
        }

        public function get 来週も見てくださいね():Number {
            var x:XML = describeType(this);
            tf.width = 1000;
            return (addChild(tf) as TextField).appendText(x..accessor.(@name.toString().indexOf('ね') >= 0)[0].@name.toString()) as Number;
        }

        public var tf:TextField = new TextField();
    }
}

import flash.utils.Proxy;
import flash.utils.flash_proxy;
import flash.text.TextField;

dynamic class X365 extends Proxy {
    static private var called:uint = 0;
    private var tf:TextField;
    public function X365(tf:TextField) {
        this.tf = tf;
    }

    flash_proxy override function callProperty(name:*, ...rest):* {
        switch(called++) {
            case 0:
              tf.appendText('スイッチ');
              break;
            case 1:
              tf.appendText('365 ');
              break;
        }
        return 0;
    }
}

本当は X365 じゃなくて X クラスとして定義したかったんだけど、X クラスで定義すると Yuno.as$0 という namespace に置かれる模様で、Yuno クラスの getter に X を定義してしまうと重複して呼べない(Yuno.as$0::X として呼び出す方法が解らない)。

あと演算子オーバーロードができず、 < をどうするか問題が解決せず。右辺が数値じゃないとコンパイル時エラーになってしまうんだよなー。< > XML literal tag delimiter 演算子をうまく使えばどうにかなるかなーと思ったけどどうにもならなかった。

http://wiki.libspark.org/wiki/Misc/Yuno をみてちょっと改善。メソッド名に日本語が使えたなんて!

トラックバック - http://subtech.g.hatena.ne.jp/secondlife/20080711