Metaclass confusion

V

Vivek

Hi,
can someone explain this.

irb(main):013:0> Class.instance_methods
=> ["superclass", "new"]
irb(main):014:0> Class.class
=> Class

I guess Class is an object(an instance of Class?) but its of type
Class. How can an object's type be an object itself.?

Vivek
 
E

Eero Saynatkari

Vivek said:
Hi,
can someone explain this.

irb(main):013:0> Class.instance_methods
=> ["superclass", "new"]
irb(main):014:0> Class.class
=> Class

I guess Class is an object(an instance of Class?) but its of type
Class. How can an object's type be an object itself.?

The traditional response is 'magick' :) While it is useful to
say that all instances are Objects and Object is an instance of
class Class which itself is an Object (the class of which is Class),
at some point there has to be a limit to how deep the recursion
goes. Because ruby is implemented in C, the language design allows
this kind of 'shortcutting'.

To be productive, you sort of just have to accept this and know the
implications of Class being an Object of Class and so on. You can
don some super-chromatic peril-sensitive sunglasses if you like :)


E
 
L

Logan Capaldo

Hi,
can someone explain this.

irb(main):013:0> Class.instance_methods
=> ["superclass", "new"]
irb(main):014:0> Class.class
=> Class

I guess Class is an object(an instance of Class?) but its of type
Class. How can an object's type be an object itself.?

Vivek

In ruby, everything is an object. Even classes. Class inherits from
object just like everything else (well it inherits from Module which
inherits from Object). Its a little weird to get used to, but that's
how it works.
 
V

Vivek

One implication I have seen is that the class definition itself is an
object which can be executed.This has some interesting properties.
 
R

Robert Klemme

Vivek said:
One implication I have seen is that the class definition itself is an
object which can be executed.This has some interesting properties.

Umm, in usual terminology objects cannot be "executed". You can "call" or
"invoke" methods but you cannot execute an object as such. You probably
meant the right thing - it just sounded quite strange... :)

Kind regards

robert
 
S

Sam Kong

Hi,
Hi,
can someone explain this.

irb(main):013:0> Class.instance_methods
=> ["superclass", "new"]
irb(main):014:0> Class.class
=> Class

I guess Class is an object(an instance of Class?) but its of type
Class. How can an object's type be an object itself.?

The following doc helped me understand Ruby object model pretty well.

Understanding Ruby's Object Model [ ChrisPine_UROM.ppt ]
(http://www.ruby-doc.org/docs/Understanding Ruby's Object Model/ChrisPine_UROM.ppt)
at http://www.ruby-doc.org/whyruby/

Hope this helps.

Sam
 
L

Levin Alexander

T24gMS8yNS8wNiwgTG9nYW4gQ2FwYWxkbyA8bG9nYW5jYXBhbGRvQGdtYWlsLmNvbT4gd3JvdGU6
Cgo+IEluIHJ1YnksIGV2ZXJ5dGhpbmcgaXMgYW4gb2JqZWN0LiBFdmVuIGNsYXNzZXMuIENsYXNz
IGluaGVyaXRzIGZyb20KPiBvYmplY3QganVzdCBsaWtlIGV2ZXJ5dGhpbmcgZWxzZSAod2VsbCBp
dCBpbmhlcml0cyBmcm9tIE1vZHVsZSB3aGljaAo+IGluaGVyaXRzIGZyb20gT2JqZWN0KS4gSXRz
IGEgbGl0dGxlIHdlaXJkIHRvIGdldCB1c2VkIHRvLCBidXQgdGhhdCdzCj4gaG93IGl0IHdvcmtz
LgoKPGh0dHA6Ly9yZWRoYW5kZWQuaG9iaXguY29tL2N1bHQvbGFzdGx5VGhlU2lua2luZ1N5bXBo
b255VmlkZW8uaHRtbD4KCi1MZXZpbgo=
 
J

Jules Jacobs

A non-circular model would be prototype based inheritance. You just
clone things to subclass them:

Song = Object.new

Song.attr_writer :title
Song.title = 'No title set'

Song.define_method :play
puts "Playing #{@title}"
end

a_song = Song.clone
a_song.title = 'Song one'
a_song.play

another_song = Song.clone
another_song.title = 'Song two'

subclass_of_a_song = a_song.clone
subclass_of_a_song.play

Then there is no distinction between class/object. This is how
Javascript does it, and it seems a good solution.

But we have a class based model, not so clean, but acceptable ;-)

Jules
 

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,581
Members
45,057
Latest member
KetoBeezACVGummies

Latest Threads

Top