やすしです。

# rubyの中の事を分ってません。まちがってると思うのでなんとか意味をくみ取っ
# てやってください (__)

Rubyでの methodと Gtk+ (GLib) での signalについて最近つらつらと考えてい
ます。前([ruby-ext:00934])にもちょっとあったんですけど、あの時は感心した
だけで終ってしまったので (^^;

Ruby的な用語(?)を使って言うと 

「Gtk+ のsignal systemは一つの method (id) に複数の proc/block objectを
関連付ける事ができる。さらに、default hander(proc object) は、signalが発
生したときにいつ callされるかを決める事ができる。」

と、なるかと思います。(違ってたら教えてください)

で、問題なのが、「複数の objectを関連付ける」と言う所なんですが

これは、ruby の singleton methodを def する事とは相反しますよね?

f = Object.new
def f.foo() p '1' end
def f.foo() p '2' end

とすると、2の方しか呼ばれないのは、1の方を overwriteするからで、これはそ
うあるべきだと思います。

もちろん Gtk+の為に Rubyを変えようと提案してる訳じゃなくて、どうしたら
singleton_methodで似た様な事ができるかって事なんですが‥。

今だと、

widget.signal_connect('hoge') proc1
widget.signal_connect('hoge') proc2
widget.signal_emit('hoge')

で、順番に callされますが、

def widget.hoge
   :
end
def widget.hoge
   :
end
widget.hoge

で、できないかと‥。

例えば、rb_evalの中で singletonの処理をしてると思うんですが(長いですねこ
の function...)、

- methodが既に def されてるときは古い proc object (node?)を 
singleton_method_addedに投げるとか、

- 新しく add されそうなprocを singleton_method_addedに投げて、user
side(つまり、singleton_method_added)が trueを返したときだけ入れ替えると
か‥。

まったく想像の域でしかないのですが、どうでしょう?
# 基本的に違う物かな‥‥やっぱり。
# methodに、複数の procを付けようってのが間違ってるかしら‥。
# methodは procの marshaler‥‥、って事は singleton methodからさらに離れ
# るなぁ‥。
--
                 yashi