マクロは、defmethodのカスタマイズネタで比較してみたいと思います。...)のように書いたりすることもあります。このようにディスパッチは先頭一つでしか行なわない場合に、defmethod内部でselfも使えたら便利なんじゃないか、ということで、そのようなカスタマイズをしてみたいと思います。マクロ篇まずはマクロでの実現。安直に下記のように書いてみました。()...)としてみています。defmethod内部では、selfとインスタンスのスロットがスロット名の変数でアクセスできるようにしたいので、with-slotsでボディを囲んでいます。マクロで実現といってもスロット名を取得したりする必要があるので、MOPを使う必要はあります。nil)クラスのスロット名とメソッドの引数名が被った時にはクラスのスロットに遮蔽されてしまいますが、Flavorsもこんな動作なので良しとします。env)))メソッドのボディのコードをカスタマイズするには、make-method-lambdaが返す、lambda式を編集することになるようです。ボディのコードをいじる用途には、ちょっと面倒なインターフェイスという印象。nil)やっていることはマクロ版と殆ど変わりありません。引数のシンボルをクラス名にする必要があるという所が危ういですが、まあ良しとします。マクロでお化粧することも可能ですが、そうするとMOPで書く意味があまりないなという気分になってしまいます。c))まとめクラスの情報を得るのにMOPのイントロスペクション機能を使う必要はありますが、得た情報からコード生成をすることに関しては、マクロの方が単純で明解ですね。