Forum: Ruby Another Ruby language question

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Neville F. (Guest)
on 2007-01-27 07:16
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_jo...

Thanks.

---
Neville F., http://www.getsoft.com http://www.surfulater.com
Harold H. (Guest)
on 2007-01-27 07:43
(Received via mailing list)
On 1/27/07, Neville F. <removed_email_address@domain.invalid> 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.)

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

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 F. (Guest)
on 2007-01-27 08:07
Harold H. wrote:
> On 1/27/07, Neville F. <removed_email_address@domain.invalid> 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 F., http://www.getsoft.com http://www.surfulater.com
Harold H. (Guest)
on 2007-01-27 08:25
(Received via mailing list)
On 1/27/07, Neville F. <removed_email_address@domain.invalid> wrote:
> 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 F. (Guest)
on 2007-01-27 08:27
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 F., http://www.getsoft.com http://www.surfulater.com
Harold H. (Guest)
on 2007-01-27 08:32
(Received via mailing list)
On 1/27/07, Neville F. <removed_email_address@domain.invalid> wrote:
>  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 C. (Guest)
on 2007-01-27 23:00
(Received via mailing list)
On 1/26/07, Neville F. <removed_email_address@domain.invalid> wrote:
>      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 topic is locked and can not be replied to.