[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Don't understand :: in ActionController::Base

Pål Bergström

7/14/2006 1:14:00 PM

I understand the concept of classes and subclasses thanks to the
excellent "Programming Ruby - The Pragmatic Programmer's Guide".
However, I don't understand what :: signify in terms of inheritance,
parent and child in e.g.

ActionController::Base

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

7 Answers

Pål Bergström

7/14/2006 1:15:00 PM

0

Pål Bergström wrote:
> I understand the concept of classes and subclasses thanks to the
> excellent "Programming Ruby - The Pragmatic Programmer's Guide".
> However, I don't understand what :: signify in terms of inheritance,
> parent and child in e.g.
>
> ActionController::Base

Btw, I'm told that I can find the answer in chapter 9, starting at page
117. But I read it on the web at
http://www.ruby-doc.org/docs/Progra..., so I have no chapters.

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

dblack

7/14/2006 1:16:00 PM

0

Jeff Pritchard

7/14/2006 3:55:00 PM

0

Hi PÃ¥l,
I'm a newbie too. I'll stick my neck out and answer here just so as to
"trick" an expert into answering. Once they see my miserable excuse for
an answer, they will be honor bound to correct me :)

ActionController::Base refers to the "Base" class of the Module
ActionController. So you are not "inheriting" the whole module, just
the "Base" class of the module. Makes sense for a Class to inherit a
Class definition rather than a whole module's definition.

best,
jp



Pål Bergström wrote:
> Pål Bergström wrote:
>> I understand the concept of classes and subclasses thanks to the
>> excellent "Programming Ruby - The Pragmatic Programmer's Guide".
>> However, I don't understand what :: signify in terms of inheritance,
>> parent and child in e.g.
>>
>> ActionController::Base
>
> Btw, I'm told that I can find the answer in chapter 9, starting at page
> 117. But I read it on the web at
> http://www.ruby-doc.org/docs/Progra..., so I have no chapters.


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

Logan Capaldo

7/14/2006 5:13:00 PM

0


On Jul 14, 2006, at 11:54 AM, Jeff Pritchard wrote:

> Hi Pål,
> I'm a newbie too. I'll stick my neck out and answer here just so
> as to
> "trick" an expert into answering. Once they see my miserable
> excuse for
> an answer, they will be honor bound to correct me :)
>
> ActionController::Base refers to the "Base" class of the Module
> ActionController. So you are not "inheriting" the whole module, just
> the "Base" class of the module. Makes sense for a Class to inherit a
> Class definition rather than a whole module's definition.
>
> best,
> jp
>
>

Everything but sentence was perfect. You can't inherit modules.

(Please avoid top posting in the future).




Gary Wright

7/14/2006 6:06:00 PM

0


On Jul 14, 2006, at 9:13 AM, Pål Bergström wrote:
> I understand the concept of classes and subclasses thanks to the
> excellent "Programming Ruby - The Pragmatic Programmer's Guide".
> However, I don't understand what :: signify in terms of inheritance,
> parent and child in e.g.

This seems to be a common source of confusion when learning Ruby
(myself included).

It is really pretty simple. Class and Module objects are referenced
via hierarchical names:

A
A::B
ActionController::Base
ActiveRecord::Base
Process::Sys

The confusion arises when you assume that the names imply class/subclass
relationships. The hierarchy of *names* is 100% independent of the
hierarchy of classes.

The scope operator (::) provides the syntax for constructing the
hierarchical class names but has no impact on the inheritance
structure of the classes:

class A
class A1; end
end

class B
class B1; end
end

class C < A; end
class D < A::A1; end
class E < B::B1; end
class B::B1::B2 < A::A1; end
class A::A1::A2 < B::B1::B2; end

From those definitions you get the following inheritance structure:

Object + -- A --------- C
|
+ -- A::A1 --+-- D
| |
| +-- B::B1::B2 -- A::A1::A2
|
+ -- B
|
+ -- B::B1 ----- E


The associated naming hierarchy is

top + -- A -- A1 -- A2
|
+ -- B -- B1 -- B2
|
+ -- C
|
+ -- D
|
+ -- E


Gary Wright




Pål Bergström

7/14/2006 7:16:00 PM

0

Jeff Pritchard wrote:
> Hi PÃ¥l,
> I'm a newbie too. I'll stick my neck out and answer here just so as to
> "trick" an expert into answering. Once they see my miserable excuse for
> an answer, they will be honor bound to correct me :)
>
> ActionController::Base refers to the "Base" class of the Module
> ActionController. So you are not "inheriting" the whole module, just
> the "Base" class of the module. Makes sense for a Class to inherit a
> Class definition rather than a whole module's definition.


Thanks for the effort Jeff. A good trick :-)

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

Pål Bergström

7/14/2006 7:19:00 PM

0

unknown wrote:

> The confusion arises when you assume that the names imply class/subclass
> relationships. The hierarchy of *names* is 100% independent of the
> hierarchy of classes.
> class D < A::A1; end
> class E < B::B1; end
> class B::B1::B2 < A::A1; end
> class A::A1::A2 < B::B1::B2; end
>
> From those definitions you get the following inheritance structure:
>
> Object + -- A --------- C
> |
> + -- A::A1 --+-- D
> | |
> | +-- B::B1::B2 -- A::A1::A2
> |
> + -- B
> |
> + -- B::B1 ----- E


Thanks. That helped.

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