Hi folks.
I tried to reproduce a Mixin example that is include in the Pick Axe
book, here's the code:

module Observable
  def observers
       @observer_list ||= []
  end

  def add_observer( obj )
   # ----?????
    observers << obj
  end

  def print_observers
    @observer_list.each{ |i| puts i  }
  end

end

def notify_observers
    # ----?????
    observers.each {|o| o.update }
end

class TelescopeScheduler
  include Observable

  def initialize
    @observer_list = [ ]
  end

  def add_viewer( viewer )
    @observer_list << viewer
  end
end

visor1 = "Carlos"
visor2 = "Ana"
my_telescope = TelescopeScheduler.new
my_telescope.add_viewer(visor1)
my_telescope.add_viewer(visor2)
my_telescope.print_observers

--------------------------
It works great however while reviewing the code  I noticed a couple of
situations that I really don't understand:
1)  Is it possible to invoke a method with a "<<" notation ?

What I mean is that inside the "add_observer" method I'm calling
observers using << instead of parenthesis:

  def add_observer( obj )
    observers << obj
  end

On the other side while reviewing the "observers" method, I noticed that
there is no parameter in its definition:
  def observers
       @observer_list ||= []
  end

Is this valid ? ( I suppose it is because it works ), but how does this
works ?

2) Same situation happens in the "notify_observers" method, in it I can
invoke "observers.each" although it is not defined anywhere. Why can I
do that?

Any help with this questions would be very appreciated.
Best Regards
Carlos
-- 
Posted via http://www.ruby-forum.com/.