[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Another Ruby language question

Neville Franks

1/27/2007 5:16:00 AM

Following from yesterday I have a few more Ruby questions.

Can someone please explain what 'self' does in the following:

module Mod1
def self.a_method
puts 'a'
end

def b_method
puts 'b'
end
end

If self isn't specificed I'm unable to call the method. ex.
Mod1::b_method fails.

I've scoured on-line docs about module and come up empty.

Next. What does '/upload' mean in:
class Upload < R '/upload'
This is from:
http://www.oreillynet.com/ruby/blog/2007/01/the_joy_of_rolling_your_o...

Thanks.

---
Neville Franks, http://www.g... http://www.surf...

--
Posted via http://www.ruby-....

6 Answers

Harold Hausman

1/27/2007 5:43:00 AM

0

On 1/27/07, Neville Franks <subs@surfulater.com> wrote:
> Following from yesterday I have a few more Ruby questions.
>
> Can someone please explain what 'self' does in the following:
>
> module Mod1
> def self.a_method
> puts 'a'
> end
>
> def b_method
> puts 'b'
> end
> end
>
> If self isn't specificed I'm unable to call the method. ex.
> Mod1::b_method fails.
>

So in this particular case, 'self' here refers to the Module called
Mod1. Your code defines a method (a_method) on the module itself which
allows you to call it with the :: syntax.

The other method (b_method) is merely a method defined inside the
module. In this case the module is acting as a namespace. If you
'include' this module somewhere in your code you'll be adding the
b_method to that place (scope?)

(disclaimer: I'm still learning ruby myself, so that may not be the
best answer ever, but it is how I understand it... And knowing these
guys these days I'll be corrected if I'm wrong, mere moments from
now.)

>
> Next. What does '/upload' mean in:
> class Upload < R '/upload'
> This is from:
> http://www.oreillynet.com/ruby/blog/2007/01/the_joy_of_rolling_your_o...
>

Right here you're fishing in _why territory (specifically the camping
framework) where things are way over my head, someone else will have
to help you there.

hth,
-Harold

Neville Franks

1/27/2007 6:07:00 AM

0

Harold Hausman wrote:
> On 1/27/07, Neville Franks <subs@surfulater.com> wrote:
>> puts 'b'
>> end
>> end
>>
>> If self isn't specificed I'm unable to call the method. ex.
>> Mod1::b_method fails.
>>
>
> So in this particular case, 'self' here refers to the Module called
> Mod1. Your code defines a method (a_method) on the module itself which
> allows you to call it with the :: syntax.
>
> The other method (b_method) is merely a method defined inside the
> module. In this case the module is acting as a namespace. If you
> 'include' this module somewhere in your code you'll be adding the
> b_method to that place (scope?)
>
> (disclaimer: I'm still learning ruby myself, so that may not be the
> best answer ever, but it is how I understand it... And knowing these
> guys these days I'll be corrected if I'm wrong, mere moments from
> now.)


Harold,
Thanks for that. I figured I understood the use of self, but assumed it
was redundant and therefore I couldn't see the difference between
a_method and b_method. Now I get it. In my C++ world we don't qualify
methods like this.

---
Neville Franks, http://www.g... http://www.surf...

--
Posted via http://www.ruby-....

Harold Hausman

1/27/2007 6:25:00 AM

0

On 1/27/07, Neville Franks <subs@surfulater.com> wrote:
> Harold Hausman wrote:
> >
> > The other method (b_method) is merely a method defined inside the
> > module. In this case the module is acting as a namespace. If you
> > 'include' this module somewhere in your code you'll be adding the
> > b_method to that place (scope?)
> >
>
> Harold,
> Thanks for that. I figured I understood the use of self, but assumed it
> was redundant and therefore I couldn't see the difference between
> a_method and b_method. Now I get it. In my C++ world we don't qualify
> methods like this.
>

No problemo.

In comparison to C++, your a_method is (kinda sorta) like a static
method, but not really, but kindof because you can use the :: syntax
to call it.

b_method is more like a method belonging to a class which you're
inheriting. The instances of your new class can call b_method
(assuming you've included Mod1) ...

Ruby only supports single inheritance directly, but you can emulate
multiple inheritance like this by just including multiple modules into
your class... I believe the rubyists like to call this mixing-in...

hth,
-Harold

Neville Franks

1/27/2007 6:27:00 AM

0

So I assume that:

module Mod1
def self.a_method
puts 'a'
end
end

is identical to:

module Mod1
def Mod1.a_method
puts 'a'
end
end


---
Neville Franks, http://www.g... http://www.surf...

--
Posted via http://www.ruby-....

Harold Hausman

1/27/2007 6:32:00 AM

0

On 1/27/07, Neville Franks <subs@surfulater.com> wrote:
> So I assume that:
>
> module Mod1
> def self.a_method
> puts 'a'
> end
> end
>
> is identical to:
>
> module Mod1
> def Mod1.a_method
> puts 'a'
> end
> end
>
>

indeed.

(apologies to anyone not reading this in a threaded fashion for the
extremely short reply.)

-Harold

Chris Carter

1/27/2007 9:00:00 PM

0

On 1/26/07, Neville Franks <subs@surfulater.com> wrote:
> Following from yesterday I have a few more Ruby questions.
>
> Can someone please explain what 'self' does in the following:
>
> module Mod1
> def self.a_method
> puts 'a'
> end
>
> def b_method
> puts 'b'
> end
> end
>
> If self isn't specificed I'm unable to call the method. ex.
> Mod1::b_method fails.
>
> I've scoured on-line docs about module and come up empty.

I see people already helped you with this one

> Next. What does '/upload' mean in:
> class Upload < R '/upload'

This is the beginning of a controller definition in the Camping
microframework. The class is "inheriting" from the method R() which
takes a regex argument of the route to bind to. The R() method then
adds some meta-info to the runtime, and returns an anonymous class
that Upload actually inherits from.

> This is from:
> http://www.oreillynet.com/ruby/blog/2007/01/the_joy_of_rolling_your_o...
>
> Thanks.
>
> ---
> Neville Franks, http://www.g... http://www.surf...
>
> --
> Posted via http://www.ruby-....
>
>


--
Chris Carter
concentrationstudios.com
brynmawrcs.com