Submitted by legacy (Fri Sep 26 00:09:15 UTC 2003)
class Observed
def delete_observers @observer_peers = [] if @observer_peers end
endHere's an example:
require "observer"
class Observed
include Observable attr_reader :str def str=(str) changed notify_observers(str) @str = str end
end
class Observer
def initialize(observed, prc) @observed = observed @prc = prc @observing = nil start end def update(*args) @prc.call(*args) end def start unless @observing @observed.add_observer(self) @observing = true end end def stop if @observing @observed.delete_observer(self) @observing = false end end
end
a = Observed.new a_observer = Observer.new(a, proc {|arg| puts "a: #{arg}" })
puts "Test 1:" a.str = "One"
b = a.dup b.delete_observers b_observer = Observer.new(b, proc {|arg| puts "b: #{arg}" })
puts "Test 2:" a.str = "Two"
puts "Test 3:" b.str = "Three"
class Observed
def delete_observers @observer_peers = [] if @observer_peers end
end
a = Observed.new a_observer = Observer.new(a, proc {|arg| puts "a: #{arg}" })
puts "Test 4:" a.str = "Four"
b = a.dup b.delete_observers b_observer = Observer.new(b, proc {|arg| puts "b: #{arg}" })
which results in this output:
puts "Test 5:" a.str = "Five"
puts "Test 6:" b.str = "Six"
Test 1: a: One Test 2: b: Two Test 3: b: Three Test 4: a: Four Test 5: a: Five Test 6: b: Six
Comments | Current voting | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
RCRchive copyright © David Alan Black, 2003-2005.
Powered by .