codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
class EventArgs attr_accessor :handled end class Event def initialize @handlers = [] end def add(&handler) @handlers.push(handler) unless @handlers.include?(handler) self end def remove(&handler) @handlers.delete(handler) if @handlers.include?(handler) self end def remove_all @handlers.clear self end def trigger(sender, args) unless @handlers.empty? for f in @handlers f.call(sender, args) break if args.handled end end end alias_method :[], :trigger end ev = Event.new def handler(sender, args) puts 'Handler 2' end ev.add { |sender, args| puts 'Handler 1' } puts '------------------' ev.trigger(self, EventArgs.new) ev.add(&method(:handler)) puts '------------------' ev[self, EventArgs.new] puts '------------------' ev.add do |sender, args| args.handled = true puts 'Last handler' end ev.add { |sender, args| puts 'should not run' } ev[self, EventArgs.new] puts '------------------' ev.remove_all ev.add { |sender, args| puts 'Sole handler' } ev.trigger(self, EventArgs.new)
Private
[
?
]
Run code
Submit