From: Dorren Date: 2007-06-03T01:35:19+09:00 Subject: so lost on singleton, metaclass and virtual class Q1: in pick axe book page 364, it talks about metaclass should be a singleton class. but when I run the following code, class's object_id are the same for all instance, but the metaclass object_id are different for each object instance, is the code wrong or what? # === begin code # snippet from http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html class Object # The hidden singleton lurks behind everyone def metaclass; class << self; self; end; end def show_meta puts "--------- #{to_s} ------------" puts "oid: #{object_id} #{self.class.name}" puts "class.oid: #{self.class.object_id} #{self.class.class.name}" puts "metaclass.oid: #{metaclass.object_id} #{self.class.metaclass.class.name}" o = Object.new # show methods meta = metaclass puts "object methods: #{(public_methods - o.public_methods).sort.inspect}" puts " class methods: #{(self.class.public_methods - o.class.public_methods).sort.inspect}" puts " meta methods: #{(meta.public_methods - Class.public_methods).sort.inspect}" puts end end # ------- fixtures for our test -------------- class A def initialize(v); @v = v; end def to_s; @v; end def m1; "method1 " end def self.class_m0; "class method0"; end end b = A.new("b") c = A.new("c") b.show_meta c.show_meta # === end code Q2: from pick axe book 364-367, it used singleton, metaclass, and virtual class definition interchangeably. are they all the same thing or not? Q3: from page 365, "To handle per-object attributes, Ruby provides a classlike some- thing for each object that is sometimes called a singleton class." if runtime create something new for EACH object, how can it be called singleton?