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
···
On Tuesday 29 March 2005 05:34 am, Glenn Smith wrote:
It's the third one I'm not sure of. The "self.foo".
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.