[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Singleton Method Questions

Gary Wright

2/3/2006 12:02:00 AM

I've been thinking about singleton methods some more. The current
implementation
tucks away singleton methods in a class object. Method lookup is
subsequently
altered to consult the singleton class of the receiver (if it exists).

Is there a particular reason why a class object is used for this purpose
rather than a module?

My motivation for this question was the observation that the
semantics of a
singleton class seem closer to a module than a class:

- method lookup is altered like a module mixin, but
the inheritance structure is not modified nor is the change
visible via ancestors (which makes sense because ancestors is
only defined for a class not for an object but which suggests that
ancestors could be defined in Kernel and return an array which
includes the singleton classes for the object)

- if B is a subclass of A then method lookup for B.x consults
the singleton class of B and the singleton class of A *as if*
the singleton class of B included the singleton class of A
even though the singleton class of B is *not* a subclass of the
singleton class of A. (i.e., method lookup is like included modules
not like subclasses)

- the singleton class doesn't have an instance (in the sense that
there is
no object x such that x.class references the singleton class).
Calling
new on a singleton class generates an exception. This is like a
module.

- singleton classes don't really participate in the inheritance
hierarchy
or perhaps it is more accurate to say that they participate in an
extremely
constrained way (superclass returns the singleton class of Class,
yet I
can't come up with an example that would cause a method to be
looked up
in the singleton class of Class other than a direct message send
to Class).

I think I've got the details correct but I welcome any corrections/
clarifications.

Gary Wright


1 Answer

Daniel Nugent

2/3/2006 7:16:00 AM

0

Well, I just happened to be mucking about with that sort of thing and
I think you might have an issue where if they were modules, you'd have
to deal with being able to call foo.metaclass.extend_object on another
object, which then makes it pretty trivial to have it interacting in
the inheritance hierarchy.

Incidentally, does anyone know of a way to do that sort of object
prototyping thing under 1.8.4? It apparently used to be possible in
1.8.2

On 2/2/06, gwtmp01@mac.com <gwtmp01@mac.com> wrote:
> I've been thinking about singleton methods some more. The current
> implementation
> tucks away singleton methods in a class object. Method lookup is
> subsequently
> altered to consult the singleton class of the receiver (if it exists).
>
> Is there a particular reason why a class object is used for this purpose
> rather than a module?
>
> My motivation for this question was the observation that the
> semantics of a
> singleton class seem closer to a module than a class:
>
> - method lookup is altered like a module mixin, but
> the inheritance structure is not modified nor is the change
> visible via ancestors (which makes sense because ancestors is
> only defined for a class not for an object but which suggests that
> ancestors could be defined in Kernel and return an array which
> includes the singleton classes for the object)
>
> - if B is a subclass of A then method lookup for B.x consults
> the singleton class of B and the singleton class of A *as if*
> the singleton class of B included the singleton class of A
> even though the singleton class of B is *not* a subclass of the
> singleton class of A. (i.e., method lookup is like included modules
> not like subclasses)
>
> - the singleton class doesn't have an instance (in the sense that
> there is
> no object x such that x.class references the singleton class).
> Calling
> new on a singleton class generates an exception. This is like a
> module.
>
> - singleton classes don't really participate in the inheritance
> hierarchy
> or perhaps it is more accurate to say that they participate in an
> extremely
> constrained way (superclass returns the singleton class of Class,
> yet I
> can't come up with an example that would cause a method to be
> looked up
> in the singleton class of Class other than a direct message send
> to Class).
>
> I think I've got the details correct but I welcome any corrections/
> clarifications.
>
> Gary Wright
>
>


--
-Dan Nugent