From: Kouhei S. <ko...@co...> - 2009-03-12 11:52:19
|
須藤です。 In <200...@me...> "[ruby-gnome2-devel-ja] set_scroll_adjustments_signal" on Wed, 11 Mar 2009 03:24:36 +0900, Kentaro Fukuchi <fu...@me...> wrote: > Gtk::Widget クラスのクラスメソッドとして登録し、添付した sctest.rb を > 実行したところ、 > > #<GLib::Signal: Hoge#set-scroll-adjustments> > 370 > (eval):3:in `instance_method': undefined method `signal_do_set-scroll-adjustments' for class `Hoge' > from (eval):3:in `signal_new' > from sctest.rb:19:in `call' > from sctest.rb:19:in `add' > from sctest.rb:19 > > というエラーが出てしまいました。エラーメッセージを見るに、"-"と"_"の違いのために > signal_do_set_scroll_adjustments が呼ばれていないように見えますが、これの原因は > どこでしょうか? Ruby/GLib2をこのように変更すれば動くと思います。 Index: src/rbgobj_signal.c =================================================================== --- src/rbgobj_signal.c (リビジョン 3603) +++ src/rbgobj_signal.c (作業コピー) @@ -103,7 +103,7 @@ VALUE proc; ID method_id; - method_id = rb_to_id(rb_str_concat(rb_str_new2(default_handler_method_prefix), signal_name)); + method_id = rb_to_id(rb_str_concat(rb_str_new2(default_handler_method_prefix), rb_funcall(signal_name, rb_intern("gsub!"), 2, rb_str_new2("-"), rb_str_new2("_")))); factory = rb_eval_string( "lambda{|klass, id|\n" どこかでメソッド名の正規化はしなければいけないですねぇ。 あと、evalもできるだけなくしたいんですよね。 |