2011/05/15

change-class が便利

CL-Gtk2 を触ってみたらとてもよかったので、エディタを使ってみている。

GtkSourceBuffer で編集対象をあつかうただが、オープンしたファイル名なども一緒に GtkSourceBuffer に持っていてほしい。

そこで change-class してみた。

GtkSourceBuffer は CL-Gtk2 では source-buffer クラスになっている。 source-buffer クラスを継承して欲しいスロットを持ったクラスを作る。 source-buffer のインスタンスができたところで、その作ったクラスに change-class する。

(defclass* buffer (source-buffer)
((view)
(name nil)
(file nil)
(yank "AAAA")
(digit-argument nil :accessor nil)
(external-format :utf-8))
(:metaclass gobject-class))

(change-class (make-instance 'source-buffer)
'buffer
:name "command buffer")

動的プロキシとかデリゲートとか意味ないな (特異メソッドはまた違う話しか) 。

MOP なら動的にスーパークラスを追加する手もあるかもしれない。

あっ、make-instance したのを change-class するのはひどい例だった。

0 件のコメント: