Another Ruby language question

N

Neville Franks

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_own_wi.html

Thanks.
 
H

Harold Hausman

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_own_wi.html

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
 
N

Neville Franks

Harold said:
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.
 
H

Harold Hausman

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
 
N

Neville Franks

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
 
H

Harold Hausman

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
 
C

Chris Carter

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top