Hi --
Hello,
No; it will point to the superclass of the class of self
class C
end
class D < C
end
D.new.class.superclass # CI think we are using different terminology. Take a look at this code:
class A
def A.hi
puts "A.hi"
enddef hi
puts "hi"
end
endclass B < A
def hi
self.class.superclass.hi
end
endb = B.new
b.hiThis will output
A.hi
Yes, because B.new.class.superclass is A, and A responds to "hi". The
method A.hi is defined in A's singleton class (or "metaclass") -- but
the object to which you are sending the message "hi" is A, not A's
singleton class.
In "Programming Ruby", they define the "metaclass" as the object which
contains the class-wide objects of the class. IE, the metaclass of A would
contain A.hi, and not A#hi (I could be getting the notation of A.hi and
A#hi backwards, or completely wrong -- A.hi is the class method, and A#hi
is the instance method.)Therefore, in B#hi, self.class.superclass does not refer to the superclass
of B -- rather it refers to the metaclass of the super of B. If it pointed
to the superclass of B, then callingself.class.superclass.hi
would print "hi", instead of "A.hi"
No, because A is the superclass of the class of "self" in your
example. A is an object in its own right; it responds to "hi".
I think you're adding an extra level of reference or indirection or
something. Look at this:
irb(main):001:0> class C; object_id; end
=> 1615634
irb(main):002:0> C.new.class.object_id
=> 1615634
irb(main):003:0> C.new.class.superclass.object_id
=> 1683084
irb(main):004:0> C.new.class.superclass
=> Object
irb(main):005:0> Object.object_id
=> 1683084
irb(main):006:0> class << C; object_id; end
=> 1615554
As you can see, the singleton class of C is not the same object as
either C or the class of C.
("Singleton class" is the most general term; the Pickaxe uses
"metaclass" to mean singleton class of a Class object. I tend to just
use "singleton".)
David
···
On Thu, 24 Aug 2006, Nathan Smith wrote:
On Thu, 24 Aug 2006 dblack@wobblini.net wrote:
--
http://www.rubypowerandlight.com => Ruby/Rails training & consultancy
----> SEE SPECIAL DEAL FOR RUBY/RAILS USERS GROUPS! <-----
http://dablog.rubypal.com => D[avid ]A[. ]B[lack's][ Web]log
Ruby for Rails => book, Ruby for Rails
http://www.rubycentral.org => Ruby Central, Inc.