Don't understand :: in ActionController::Base

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

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
Programming Ruby: The Pragmatic Programmer's Guide, so I have no chapters.

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 :slight_smile:

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
Programming Ruby: The Pragmatic Programmer's Guide, so I have no chapters.

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 (::slight_smile: 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 W.

Jeff P. 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 :slight_smile:

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 :slight_smile:

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.

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

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).