[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Please tell me what this means? self. in a class

Glenn Smith

3/29/2005 10:34:00 AM

Not entirely sure I understand this (it's a newbie-ruby question).

class Test
def foo
end

def Test.foo
end

def self.foo
end
end


The first definitition of foo is an instance method. The second a
class method. Perhaps my terminology is wrong but I understand what I
mean.

It's the third one I'm not sure of. The "self.foo".

What does this do, how and where would I use it?


--

All the best
Glenn
Aylesbury, UK


5 Answers

David Corbin

3/29/2005 11:04:00 AM

0

On Tuesday 29 March 2005 05:34 am, Glenn Smith wrote:
>
> It's the third one I'm not sure of. The "self.foo".
>
> What does this do, how and where would I use it?

The self.foo method definition is redefining Test.foo. It's kind of a
shorthand notation. You'd use by saying "Test.foo". The important lesson
here, is that class/module definitions are in fact executing ruby code in the
context of the class/module, hence, there is a "self" which is the
class/module object.


David


dblack

3/29/2005 11:11:00 AM

0

Glenn Smith

3/29/2005 11:30:00 AM

0

Ah. That's what confused me. I couldn't find it in pickaxe2.

Thanks David(s!)

Glenn


On Tue, 29 Mar 2005 20:11:01 +0900, David A. Black <dblack@wobblini.net> wrote:
> Hello --
>
> On Tue, 29 Mar 2005, Glenn Smith wrote:
>
> > Not entirely sure I understand this (it's a newbie-ruby question).
> >
> > class Test
> > def foo
> > end
> >
> > def Test.foo
> > end
> >
> > def self.foo
> > end
> > end
> >
> >
> > The first definitition of foo is an instance method. The second a
> > class method. Perhaps my terminology is wrong but I understand what I
> > mean.
> >
> > It's the third one I'm not sure of. The "self.foo".
> >
> > What does this do, how and where would I use it?
>
> Every time you do this:
>
> def some_object.some_method
> ...
> end
>
> you create a singleton method some_method for the object some_object
> -- that is, a method that only some_object can call.
>
> If you do the above using 'self' as the receiver, then the singleton
> method you create will belong to whatever 'self' was at the time.
>
> In your example, self is actually Test, the class whose scope you are
> in. So, in effect, Test.foo and self.foo are the same, in that
> context.
>
> David
>
> --
> David A. Black
> dblack@wobblini.net
>
>


--

All the best
Glenn
Aylesbury, UK


Robert Klemme

3/29/2005 12:11:00 PM

0


Additional remarks:

- Preferably use "self" instead of the class name in order to minimize
the number of places in the code you have to touch if the class name
changes.

- You can as well use the class << notation either way

class Test
class <<self
def foo() "foo" end
end

class <<Test
def bar() "bar" end
end
end

>> Test.foo
=> "foo"
>> Test.bar
=> "bar"

Of course you can define multiple methods with this in one
class<<self...end like for "normal" classes.

Kind regards

robert

Brian Candler

3/30/2005 8:54:00 AM

0

On Tue, Mar 29, 2005 at 08:29:34PM +0900, Glenn Smith wrote:
> Ah. That's what confused me. I couldn't find it in pickaxe2.
>
> Thanks David(s!)

There's more here:
http://www.rubygarden.org/ruby?Singlet...