< :the previous in number
^ :the list in numerical order
> :the next in number
P :the previous (in thread)
N :the next (in thread)
|<:the top of this thread
>|:the next thread
^ :the parent (reply-to)
_:the child (an article replying to this)
>:the elder article having the same parent
<:the youger article having the same parent
---:split window and show thread lists
| :split window (vertically) and show thread lists
~ :close the thread frame
.:the index
..:the index of indices
Hi --
(Testing a new way of posting to Usenet.... hoping it works....)
(Copy to Simon)
On Mon, 8 Mar 2004, Simon Strandgaard wrote:
> On Mon, 08 Mar 2004 08:35:34 +0900, Yukihiro Matsumoto wrote:
> > In message "proposal: class<<obj to invoke extend_object"
> > on 04/03/08, Simon Strandgaard <neoneye / adslhome.dk> writes:
> >
> > |'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.
> >
> > 'obj.extend' add a module to the inheritance graph (per object base),
> > whereas 'class <<obj' add methods and attributes to the existing
> > singleton class. Virtually, singleton class always exists for each
> > object, never added, never extended.
> >
>
> I don't get this.. (thanks+sorry matz).
>
> I had the impression that they didn't differ much.
> Is there anyone which can explain this to me?
When you do "obj.extend(Mod)", obj.ancestors changes (new module
added).
When you do "class << obj ... end", obj.ancestors stays the same. All
you're doing is adding a method to a class; you're not extending obj,
in the sense of putting a new module in its ancestry (i.e., method
lookup path).
If you invoked #extended every time you did this, you'd have to invoke
it on every String object if you did:
class String
#...
end
Singleton classes are, I think, implemented in such a way that they
don't actually have existence until they're first referred to. But,
as Matz says, every object virtually has a singleton class all the
time.
David
--
David A. Black
dblack / wobblini.net