From: Masao M. <mu...@hi...> - 2003-11-14 08:44:55
|
むとうです。 On Fri, 7 Nov 2003 01:22:29 +0900 Masao Mutoh <mu...@hi...> wrote: > 2. signal_override > 今の実装だとsignal_override()は不要なのですが > signal_newとレベルをあわせた方がやはり良いような > 気がします。 > そこで、signal_override()は必須ということで > とりあえずsignal.patchみたいにしてみましたが > いかがでしょうか。 > signal_override()が宣言されていない場合は > signal_do_*()が定義されても呼び出されません。 この件をどうにかしようと思って いろいろ考えていたのですが、以下のコードを 書いてみたところ、一貫性はあまり意味がない 気がしてきました。 class MyButton < Gtk::Button type_register("MyButton") signal_override("clicked") def signal_do_clicked(*args) end signal_new("hoge", ...) def signal_do_hoge(a, b) end end class MyButton2 < MyButton type_register("MyButton") # signal_override("clicked") #=> (1) def signal_do_clicked(*args) end # signal_override("hoge") #=> (2) def signal_do_hoge(a, b) end signal_new("hoge2", ...) def signal_do_hoge2(a, b) end end この前の実装(で@@_signal_overridenをクラス 単位に変更したもの)を試してみたのですが、 結局Rubyレベルでは(1),(2)は不要になってしまいました。 "宣言したクラスのみで"という条件を入れれば signal_override()がクラス毎に毎回必要という実装にすること も可能かとは思いますが、 そうすると、今度は逆に、MyButtonで宣言したsignal_do_clicked をMyButton2でオーバーライドできない(ように見える)ということ になるので、Rubyっぽさという意味で気持ち悪いかなと。 > あと、これ、ブロックを受け付けるようにしていただいた > ようですが、複数の手法を用意するのも混乱の元のような > 気もしますし、無くしちゃった方が良いのでは? つーことで、2転3転して申し訳ないのですが、 signal_overrideは廃止って方向でどうでしょう。 -- .:% Masao Mutoh<mu...@hi...> |