'obj.extend'  and  'class<<obj' are close cousins.. 
However there is a difference.. 'class<<obj' doesn't 
invoke #extend_object, and #extended. To me it feels 
inconsistent that there is no way to execute code on the 
point when the extension occurs.

I propose that 'class<<obj' invokes #extend_object and #extended.



Lets make a comparison.. first I present some code
which works using #extend.
Next I present some code which doesn't work.. but 
which should work.

server> ruby a.rb
hello
server> cat a.rb 
module M
  def self.extended(parent)
    parent.init_m
  end
  def init_m
    @str = "hello"
  end
  def hello
    puts @str
  end
end
class C
end
c = C.new
c.extend(M)
c.hello
server>



The next part doesn't work.. (thus the proposal)

server> cat b.rb 
class C
end
c = C.new

class << c
  def self.extended(parent)    # proposal: invoke me ;-)
    parent.init_m
  end
  def init_m
    @str = "hello"
  end
  def hello
    puts @str
  end
end

c.hello
server> ruby b.rb 
b.rb:13: warning: instance variable @str not initialized
nil
server>



--
Simon Strandgaard