やすしです。
# 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