Shiro Kawai
shiro****@lava*****
2004年 1月 9日 (金) 17:39:37 JST
From: Masatake YAMATO <jet****@gyve*****> Subject: [Gauche-devel-jp] Re: class method Date: Fri, 09 Jan 2004 17:24:23 +0900 (JST) > > ただ、ユーザ定義クラスで同様のことをやるには、自分でメタクラスを > > 作ってやる必要があります。 > > ありがとうございます。うまくクラスメソッドを定義することができ > ました。しかしメタクラスを定義するのが手間ですね。 はい。そのせいもあって、eql specializerの方に今は傾いています。 > なるほど。クラス変数なんかはどこに格納されて > いるのでしょうか。これも独自のメタクラスが必要かな > と思ったのですが、 これは、proceduralなスロットを使ったトリックです。 :allocationが:class, :each-subclassなスロットは、 参照時/変更時に手続きが呼ばれるスロットになっています。 その手続きが、クラスが作成された時に共通のローカル変数をclose するために、あたかもクラスインスタンス自身が値を保持しているように見えます。 具体的にはソースのlib/gauche/object.scmのcompute-get-n-setあたりを どうぞ。 --shiro