Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.ruby
Re: Event handling
Aa Aa
5/8/2008 5:42:00 AM
Oke, I've implemented the following observer/listener program:
class Cow
def initialize
@listeners = Array.new
end
def add_listener(listener)
raise ArgumentError if !listener.respond_to?(:sound_event) &&
!listeners.include?(listener)
@listeners << listener
end
def remove_listener(listener)
@listeners.delete(listener)
end
def notify_listeners
for i in 0...@listeners.length
@listeners[i].sound_event('MHOEEEE')
end
end
def be_happy
notify_listeners
end
end
class Program
def sound_event(value)
puts value
end
def start
cow = Cow.new
cow.add_listener(self)
cow.be_happy
end
end
Program.new.start
Is this an appropriate way of doing event handling in ruby?
--
Posted via
http://www.ruby-...
.
3 Answers
Shawn Anderson
5/8/2008 7:12:00 AM
0
[Note: parts of this message were removed to make it a legal post.]
This seems like a decent approach; maintaining a list of listeners and
notifying them. A few notes:
for i in 0...@listeners.length
@listeners[i].sound_event('MHOEEEE')
end
Closures or blocks in ruby are perfect for this:
@listeners.each do |listener|
listener.sound_event 'MHOEEEE'
end
to get cool eventing like:
@car.when :crashing do
jump_out
end
I recommend looking at Publisher:
http://rubyforge.org/projects/atomi...
On Wed, May 7, 2008 at 10:42 PM, Aa Aa <banditgsf600n@hotmail.com> wrote:
> Oke, I've implemented the following observer/listener program:
>
> class Cow
> def initialize
> @listeners = Array.new
> end
>
> def add_listener(listener)
> raise ArgumentError if !listener.respond_to?(:sound_event) &&
> !listeners.include?(listener)
> @listeners << listener
> end
>
> def remove_listener(listener)
> @listeners.delete(listener)
> end
>
> def notify_listeners
> for i in 0...@listeners.length
> @listeners[i].sound_event('MHOEEEE')
> end
> end
>
> def be_happy
> notify_listeners
> end
> end
>
> class Program
> def sound_event(value)
> puts value
> end
>
> def start
> cow = Cow.new
> cow.add_listener(self)
> cow.be_happy
> end
> end
>
> Program.new.start
>
> Is this an appropriate way of doing event handling in ruby?
> --
> Posted via
http://www.ruby-...
.
>
>
George Malamidis
5/8/2008 8:26:00 AM
0
Hello,
You can also have listeners register blocks to certain events instead
of implementing a specific method like "sound_event". That way you
publisher can be more decoupled from the listeners' implementation.
Have a look at
http://nutrun.com/weblog/event...
Thanks,
George
On 8 May 2008, at 08:11, wrote:
> This seems like a decent approach; maintaining a list of listeners and
> notifying them. A few notes:
> for i in 0...@listeners.length
> @listeners[i].sound_event('MHOEEEE')
> end
>
> Closures or blocks in ruby are perfect for this:
> @listeners.each do |listener|
> listener.sound_event 'MHOEEEE'
> end
>
> to get cool eventing like:
>
> @car.when :crashing do
> jump_out
> end
> I recommend looking at Publisher:
>
http://rubyforge.org/projects/atomi...
>
>
> On Wed, May 7, 2008 at 10:42 PM, Aa Aa <banditgsf600n@hotmail.com>
> wrote:
>
>> Oke, I've implemented the following observer/listener program:
>>
>> class Cow
>> def initialize
>> @listeners = Array.new
>> end
>>
>> def add_listener(listener)
>> raise ArgumentError if !listener.respond_to?(:sound_event) &&
>> !listeners.include?(listener)
>> @listeners << listener
>> end
>>
>> def remove_listener(listener)
>> @listeners.delete(listener)
>> end
>>
>> def notify_listeners
>> for i in 0...@listeners.length
>> @listeners[i].sound_event('MHOEEEE')
>> end
>> end
>>
>> def be_happy
>> notify_listeners
>> end
>> end
>>
>> class Program
>> def sound_event(value)
>> puts value
>> end
>>
>> def start
>> cow = Cow.new
>> cow.add_listener(self)
>> cow.be_happy
>> end
>> end
>>
>> Program.new.start
>>
>> Is this an appropriate way of doing event handling in ruby?
>> --
>> Posted via
http://www.ruby-...
.
>>
>>
Aa Aa
5/8/2008 4:50:00 PM
0
Thanks, I'll check both of the suggested techniques.
--
Posted via
http://www.ruby-...
.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
Re: Event handling
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password