From: Mauricio Fernandez Date: 2006-02-19T19:21:30+09:00 Subject: Re: Ruby Method Lookup Flow On Sun, Feb 19, 2006 at 03:33:29PM +0900, Phrogz wrote: > I sat down to diagram Ruby's object model in something better than > ascii, and ended up getting confused on how to label 'objects' or > 'spaces' where methods lived. So instead, I diagrammed[1] the flow of > how method lookup works. I was surprised by a few findings, so I think > it was a nice exercise. > > For your enjoyment and criticism, I give you: > http://phrogz.net/RubyLibs/RubyMethodLookupFlow.png > > Gimme a holler if anything about it is wrong (inconceivable). The unimaginable happens. "All method lookups include, and finish at, the Object metaclass." Object includes Kernel... Also, s/metaclass//. Maybe you could insert another module between Square and Rect, as in class A; def foo; "A#foo" end end class B < A; end module C; def foo; "C#foo" end end b = B.new b.foo # => "A#foo" class B; include C end b.foo # => "C#foo" in order to show that modules can shadow instance methods defined in classes and that there's no special rule to make them float right below Object or anything like that. -- Mauricio Fernandez - http://eigenclass.org - non-trivial Ruby