On Sep 13, 5:21=A0am, Sebastian Hungerecker <sep... / googlemail.com> wrote: > RichardOnRails wrote: > > def parents(obj) > > =A0 ( (obj.superclass ? parents(obj.superclass) : []) << obj). reverse > > end > > [...] > > parents(Class).inspect =A0=3D> =A0[Class, Object, Module] > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0Expected: =A0[Class, Module, Obj= ect] > > Ok, here's what happens: > parents(Class) =A0=3D (parents(Module) << Class).reverse > parents(Module) =3D (parents(Object) << Module).reverse > parents(Object) =3D [Object] > parents(Module) =3D ([Object] << Module).reverse > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =3D [Module, Object] > parents(Class) =A0=3D ([Module, Object] << Class).reverse > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =3D [Module, Object, Class].reverse > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =3D [Class, Object, Module] > > Anyway, do you know that you can get what you want just by calling > TheClass.ancestors? Well, not quite as that also includes included > modules, but TheClass.ancestors.grep(Class) would give you exactly > the results you expected from your method. > > HTH, > Sebastian > -- > NP: Obituary - I'm in Pain > Jabber: sep... / jabber.org > ICQ: 205544826 Thanks, Sebastian! I stupidly failed to recognize that "reverse" would affect each iteration of the recursive routine, rather than merely to last iteration as I intended. I removed the interior "reverse" and the world is beautiful again, to wit: parents(Class).reverse.inspect =3D> [Class, Module, Object] > TheClass.ancestors? I did know about that, but thanks for asking. I wanted to write my own trace routine so that I have my own insight into metaprogramming techniques and the structure of Ruby. Best wishes, Richard