
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 .