Basic question about Ruby's class hierarchy

P

Patrick Li

Hi,
I thought I understood this, but apparently not.

What is this object exactly?
o = class << String; self; end

From my understanding:
p o
and
p String
should output the same thing.

but it doesn't
p o #<Class:String>
p String #String

Thanks for answering such a basic question for me.
-Patrick
 
E

Eric I.

I thought I understood this, but apparently not.

What is this object exactly?
o = class << String; self; end

From my understanding:
p o
and
p String
should output the same thing.

but it doesn't
p o #<Class:String>
p String #String

o is not the same as String. o is String's metaclass. The exact role
that metaclasses play is Ruby's take on object-oriented programming is
too much for an answer post such as this. But you might want to read
why's explanation at:

http://www.whytheluckystiff.net/articles/seeingMetaclassesClearly.html

Eric

====

Rails training and Ruby training available at http://LearnRuby.com .
On-site and customized training are available.
 
C

Chris Shea

Hi,
I thought I understood this, but apparently not.

What is this object exactly?
o = class << String; self; end

From my understanding:
p o
and
p String
should output the same thing.

but it doesn't
p o #<Class:String>
p String #String

Thanks for answering such a basic question for me.
  -Patrick

In your example, String is an instance of Class, and o is the
eigenclass (or metaclass) of String. Maybe this will help clarify:

o = class << String; self; end
o.class_eval do
def backwards
'gnirtS'
end
end

String.backwards # => "gnirtS"

HTH,
Chris
 

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

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top