ブロックって引数の最後に&つきの変数で受け取れるってことで実験。
class Button attr_accessor :text def initialize text self.text = text end def add_event &event @events = [] unless @events @events << event end def fire_event @events.each { |evt| evt.call(self) } if @events end def to_s "Button text: #{text}" end end btn = Button.new "OK" btn.fire_event # 何もおきない btn.add_event { |sender| puts "execute1: #{sender}" } btn.add_event { |sender| puts "execute2: #{sender}" } btn.add_event { |sender| puts "execute3: #{sender}" } btn.fire_event # 事前に登録したブロックが実行される
実行結果
execute1: Button text: OK execute2: Button text: OK execute3: Button text: OK
面白いことに使えそうだ!!