読者です 読者をやめる 読者になる 読者になる

GaucheのMOPいじり

Gaucheでは、クラス、クラス、クラスをサブクラス化することでオブジェクトシステムの振る舞いをカスタマイズすることができる。
をサブクラス化したクラスメタクラスにもつようなクラスを定義するには、

(define-class <myclass> () () :metaclass <myclass-meta>)

とすればいい。また、をサブクラス化したクラスインスタンスである総称関数new-genericを定義するには、

(define-generic new-generic :class <mygeneric>)

とすればいい。


と、ここまではGaucheのリファレンスで探せばすぐに見つかるのだけれど、クラスをサブクラス化したクラスのインスタンスとしてメソッドを定義するときはどうすればいいんだろか?define-methodにオプションを渡すようなやり方はないのかな。makeをオーバーライドすればインスタンス化できるけど、そのあたりリファレンスには

7.6.3 メソッドのインスタンシエーション

Method: make (class ) &rest initargs

Gauche ユーザリファレンス: 7.3 インスタンス

と、とてもそっけなく書かれていて、initargsとして何を渡せばいいのか分からない。というか、このへん全体的に記述がないんだけど、何か意図があるのかな?総称関数やメソッドの振る舞いを変えるのは推奨しない、とか。