ruby-****@lists*****
ruby-****@lists*****
2003年 4月 6日 (日) 01:33:02 JST
------------------------- REMOTE_ADDR = 61.26.70.211 REMOTE_HOST = ------------------------- ------------------------- = シグナルハンドラをさらに signal_connectについて別の視点から見てみよう. % irb irb(main):001:0> require 'gtk2' => true irb(main):002:0> b = Gtk::Button.new("hoge") => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8> irb(main):003:0> b.signal_connect("clicked") {puts 1} => 1 irb(main):004:0> b.signal_connect("clicked") {puts 2} => 2 signal_connectメソッドからの返り値に気付いただろうか? これはコールバックブロックを識別するためのタグである。 前述したようにシグナルやオブジェクトには必要なだけのコールバックブロックを登録することができ、それらは接続した順番に実行される。 それでは実際にシグナルを発行してみよう. signal_emitメソッドは,引数に指定したシグナルを発行するメソッドである. コールバックブロックが登録された順番に実行されていることが分かる. irb(main):005:0> b.signal_emit "clicked" 1 2 => nil signal_handler_disconnectメソッドはコールバックブロックを取り除くメソッドである. 取り除くコールバックブロックを指定する際にsignal_connectが返すタグを使う. irb(main):006:0> b.signal_handler_disconnect 1 => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8> irb(main):007:0> b.signal_emit "clicked" 2 => nil また,signal_handler_blockメソッドとsignal_handler_unblockメソッドを用いて,一時的にコールバックブロックを無効にしたり有効にしたりできる. irb(main):008:0> b.signal_handler_block 2 => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8> irb(main):009:0> b.signal_emit "clicked" => nil irb(main):010:0> b.signal_handler_unblock 2 => #<Gtk::Button:0x0a2b84c0 ptr=0x0a3431a8> irb(main):011:0> b.signal_emit "clicked" 2 => nil