Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > class/singleton methods

Reply
Thread Tools

class/singleton methods

 
 
Mark Volkmann
Guest
Posts: n/a
 
      10-03-2005
These seem to be identical. Are they?

class Foo
def Foo.bar
# some code
end
end

class Foo
def self.bar
# some code
end
end

If they are identical, is one form generally preferred over the other?

So a "class method" is the same as a "singleton method" on a Class object?

--
R. Mark Volkmann
Partner, Object Computing, Inc.


 
Reply With Quote
 
 
 
 
Rob Rypka
Guest
Posts: n/a
 
      10-03-2005
On 10/2/05, Mark Volkmann <(E-Mail Removed)> wrote:
> These seem to be identical. Are they?
>
> class Foo
> def Foo.bar
> # some code
> end
> end
>
> class Foo
> def self.bar
> # some code
> end
> end


They are identical. Inside Foo, self=3D=3DFoo

> If they are identical, is one form generally preferred over the other?


I think it's more a matter of style. The advantage of using 'self' is
that it always works with the class name (so you won't mess up cutting
and pasting or changing the name of the class), but it's less clear
what it does to others (you had to ask).

> So a "class method" is the same as a "singleton method" on a Class object=

?

Umm, yes? I'm not always sure what those terms refer to.

I think reading this will help sort out your issues:

http://www.rubygarden.org/ruby?ClassMethods

--
Rob


 
Reply With Quote
 
 
 
 
David A. Black
Guest
Posts: n/a
 
      10-03-2005
Hi --

On Mon, 3 Oct 2005, Mark Volkmann wrote:

> These seem to be identical. Are they?
>
> class Foo
> def Foo.bar
> # some code
> end
> end
>
> class Foo
> def self.bar
> # some code
> end
> end
>
> If they are identical, is one form generally preferred over the other?


The advantage of the self version is that it might be a little easier
to maintain (e.g., if you change the name of the class).

> So a "class method" is the same as a "singleton method" on a Class object?


Basically, yes. I think the main difference is that they have a bit
of language-level "special case" status. There's the class_methods
method, which makes them "official". Also, because of the way
classes' singleton classes work, a subclass can actually call the
singleton methods of its parent class:

class C
def self.x
puts "Calling x on #{self}"
end
end

class D < C
end

D.x # Calling x on D

As far as I know that's the only situation where an object can call
another object's singleton method. That may be enough to warrant a
different term for them. I have to say, though, I've seen the class
method/singleton method relation serve as the "ah ha!" moment for
many, many people grappling with singleton stuff in Ruby (even if it
turns out to be a somewhat special case).


David

--
David A. Black
http://www.velocityreviews.com/forums/(E-Mail Removed)


 
Reply With Quote
 
ES
Guest
Posts: n/a
 
      10-03-2005
David A. Black wrote:
> Hi --
>
> On Mon, 3 Oct 2005, Mark Volkmann wrote:
>
>> These seem to be identical. Are they?
>>
>> class Foo
>> def Foo.bar
>> # some code
>> end
>> end
>>
>> class Foo
>> def self.bar
>> # some code
>> end
>> end
>>
>> If they are identical, is one form generally preferred over the other?

>
>
> The advantage of the self version is that it might be a little easier
> to maintain (e.g., if you change the name of the class).
>
>> So a "class method" is the same as a "singleton method" on a Class
>> object?

>
>
> Basically, yes. I think the main difference is that they have a bit
> of language-level "special case" status. There's the class_methods
> method, which makes them "official". Also, because of the way
> classes' singleton classes work, a subclass can actually call the
> singleton methods of its parent class:
>
> class C
> def self.x
> puts "Calling x on #{self}"
> end
> end
>
> class D < C
> end
>
> D.x # Calling x on D
>
> As far as I know that's the only situation where an object can call
> another object's singleton method.


Hm?

class Foo
end

f = Foo.new

def f.foo()
puts 'foo'
end

f.foo


> ... That may be enough to warrant a
> different term for them. I have to say, though, I've seen the class
> method/singleton method relation serve as the "ah ha!" moment for
> many, many people grappling with singleton stuff in Ruby (even if it
> turns out to be a somewhat special case).
>
>
> David


E


 
Reply With Quote
 
Nicholas Seckar
Guest
Posts: n/a
 
      10-03-2005
ES wrote:
>> As far as I know that's the only situation where an object can call
>> another object's singleton method.


Meaning that the singleton method of C is being called with self as D.

My apologies if I misinterpret you David.


 
Reply With Quote
 
David A. Black
Guest
Posts: n/a
 
      10-03-2005
Hi --

On Mon, 3 Oct 2005, ES wrote:

> David A. Black wrote:
>>
>> As far as I know that's the only situation where an object can call
>> another object's singleton method.

>
> Hm?
>
> class Foo
> end
>
> f = Foo.new
>
> def f.foo()
> puts 'foo'
> end
>
> f.foo


I think you must have misunderstood me. What I mean is: as far as I
know, class methods are the only per-object methods (defined as
obj.meth) that an object other than the object they were defined on
has in its method search path.


David

--
David A. Black
(E-Mail Removed)


 
Reply With Quote
 
Mark Volkmann
Guest
Posts: n/a
 
      10-03-2005
On 10/2/05, David A. Black <(E-Mail Removed)> wrote:
> Hi --
>
> On Mon, 3 Oct 2005, Mark Volkmann wrote:
>
> > These seem to be identical. Are they?
> >
> > class Foo
> > def Foo.bar
> > # some code
> > end
> > end
> >
> > class Foo
> > def self.bar
> > # some code
> > end
> > end
> >
> > If they are identical, is one form generally preferred over the other?

>
> The advantage of the self version is that it might be a little easier
> to maintain (e.g., if you change the name of the class).
>
> > So a "class method" is the same as a "singleton method" on a Class obje=

ct?
>
> Basically, yes. I think the main difference is that they have a bit
> of language-level "special case" status. There's the class_methods
> method, which makes them "official".


Did you mean the singleton_methods method? I don't see a method named
class_methods anywhere.

--
R. Mark Volkmann
Partner, Object Computing, Inc.


 
Reply With Quote
 
David A. Black
Guest
Posts: n/a
 
      10-03-2005
Hi --

On Mon, 3 Oct 2005, Mark Volkmann wrote:

> On 10/2/05, David A. Black <(E-Mail Removed)> wrote:
>>
>> Basically, yes. I think the main difference is that they have a bit
>> of language-level "special case" status. There's the class_methods
>> method, which makes them "official".

>
> Did you mean the singleton_methods method? I don't see a method named
> class_methods anywhere.


I meant class_methods, and I was wrong. For some reason, I have for
five years been going repeatedly through the cycle of thinking there
is such a method, and then being reminded that there isn't, and then
thinking that there is. It's some kind of bizarre mental glitch.

I'm actually glad there isn't And maybe this time I'll remember.


David

--
David A. Black
(E-Mail Removed)


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Is there a way to find the class methods of a class, just like'methods' finds the instance methods? Kenneth McDonald Ruby 5 09-26-2008 03:09 PM
Top-Up Methods - Finarea (Voipcheap, internetcalls, etc.) et. al., VOIP Services Question - Top-up Methods News Reader UK VOIP 0 04-10-2006 02:41 PM
Why Petshop Changed all static methods to instance methods when upgrading from version 3.0 to version 3.1? Neo ASP .Net 1 01-07-2005 01:46 AM
Derived methods hiding inherited methods Tron Thomas C++ 10 11-10-2004 09:32 AM
Re: Templates and friends and template methods with private methods. Buster Copley C++ 5 07-07-2003 12:50 AM



Advertisments